将 Char 从命令行存储到 C 中的 Char 数组



当我尝试将 stdin 存储在 char 数组变量内的程序中时,我遇到了问题。

当它经过以下行时,它会抛出段错误:

procNames[processNumber] = argv[1];

strcpy(procNames[processNumber], proc[0]);

如何将字符存储在数组 procName 中?

用法是:

(stdin) <CHAR>: <NUMBER>

我想存储订单介绍的每一<CHAR>和每一种<NUMBER>。存储<NUMBER>没有错误,<CHAR>存储会引发分段错误。

char line[80],proc[80];
// Storing
char procNames[80];
int procPorts[80];
// To iterate
int processNumber = 0;
int actualProcessNumber = 0;
[...]
for(;fgets(line,80,stdin);) {
sscanf(line,"%[^:]: %d",proc,&port);
[...]
if(strcmp(proc,argv[1]) == 0) {
if (repeatedProc == false) {
procNames[processNumber] = argv[1];
procPorts[processNumber] = puerto_udp;
actualProcessNumber = processNumber;
processNumber++;
}
} else {
if (repeatedProc == false) {
strcpy(procNames[processNumber], proc[0]);
procPorts[processNumber] = port;
processNumber++;
}
}
}

有人可以帮我吗?

关于您遇到的问题:

1.

你需要

char procNames[N][80];

而不是

char procNames[80];

其中N给出了要保留procNames的字符串数量。[80] - 1只指定每个字符串中可能的最大字符数。

阿拉伯数字。

不能在 C 中通过=运算符为数组分配字符串。请改用strcpy()

取代

procNames[processNumber] = argv[1];

strcpy( procNames[processNumber], argv[1] );

3.

strcpy(procNames[processNumber], proc[0]);
  1. 的第二个参数需要是一个指向char的指针,proc[0]的类型是char。仅使用proc
  2. proc中没有要复制的字符串。 至少使用char proc[80] = "";以免出现运行时错误。

> 您的procNames是一个字符数组,而不是指针数组。数组无法分配,只能复制,procNames[processNumber] = argv[1]实际上应该发出警告/错误。

此外,由于您打算拥有一组 - 比方说 - 10 个这样的名称,您可能意味着

char procNames[10][80];

然后你可以写

strcpy(procNames[processNumber],argv[1]);

以复制字符串的内容argv[1]指向。 Furhter,为了避免你超过一个procNames条目的长度,我建议使用

strncpy(procNames[processNumber],argv[1],80); 

您定义了char procNames[80];这意味着它是一个可以容纳 80 个字符的字符串(也计算末尾的 0 终止符(。

稍后您将执行此procNames[processNumber] = argv[1];其中procNames[processNumber]指向一个字符,argv[1]是包含第一个命令行参数的字符串。所以实际上你正在尝试分配一个指向字符的指针。

你的编译器必须至少警告过你这一点。

确保真正查看编译器输出,因为它经常试图告诉您做错了什么。

最新更新