我似乎无法用 \0 结束我的字符串。我不确定这是否是问题,所以决定发帖询问。
首先,我声明我的字符串为:
char *input2[5];
在程序的后续中,我添加了这行代码来将所有未使用的插槽转换为
\0
,将它们全部变成了空结束符。本可以使用for循环实现,但是就这样吧。while (c != 4) {
input2[c] = '\0';
c++;
}
在Eclipse中,当处于调试模式时,我看到空槽现在包含的是0x0而不是\0。这些是相同的吗?另一个字符串我声明为。
char input[15] = "";
但在调试模式下显示\000。我的问题是,我在Debian VM上遇到了分段错误(但在我的Linux 12.04上可以正常运行)。我猜测是因为字符串没有真正终止,编译器不知道它何时停止,因此会尝试在数组中访问内存,而该数组已经越界。
编辑: 我会尽快回答所有其他问题,但当我将字符串声明更改为其他建议的方式时,我的程序崩溃了。有一个strtok()函数,用于将我的fgets输入切成字符串,然后将它们放入我的input2数组中。
所以,
input1[0] = 'l'
input1[1] = 's'
input1[2] = '\n'
input2[0] = "ls".
这是一个使用fork和execvp模拟shell的程序。我很快会发布更多代码。
关于建议:
char *input2[5]; 这是一个完全合法的声明,但它将input2定义为指针数组。要包含字符串,它需要是char数组。
我会尝试再次进行更改。我之前确实尝试过,但我记得它给了我另一个运行时错误(段错误?)。我认为这是因为我实现的strtok()函数的方式不同。我会再次检查它。谢谢!
编辑2:我在下面添加了一个响应以更新我的进展情况。感谢所有的帮助!
.
char input2[5];
,而非char *input2[5];
。 - R Sahuchar input[5];
?你真的需要额外的间接层吗?while (c < 4)
更安全。而且一定要初始化 "c"! - FoggyDay0x0
来显示空指针的值;它可能会使用'\0'
来显示空字符的值。不幸的是,正如我在我的答案中提到的那样,'\0'
是一个有效的空指针常量。 - Keith Thompson