当我尝试将 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]);
- 的第二个参数需要是一个指向
char
的指针,proc[0]
的类型是char
。仅使用proc
。 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]
是包含第一个命令行参数的字符串。所以实际上你正在尝试分配一个指向字符的指针。
你的编译器必须至少警告过你这一点。
确保真正查看编译器输出,因为它经常试图告诉您做错了什么。