我正在阅读一本关于操作系统的书,书中的一些示例代码给我一个运行时段错误。我是从 Java 开始接触 C 语言的新手,我希望有人能为我指明正确的方向。
这里的小程序应该生成一个简单的 shell,读入一个命令并派生一个进程来执行它。问题出在本书的代码本身,在“scanf”函数调用处;当我在“osh>”提示符下输入内容时,出现段错误。
根据我对 C 的了解,我认为可能需要为 args 数组分配内存,但由于它是直接在 main 函数中声明的数组,我认为我可能不需要。我想如果我这样做了,它就会出现在本书的代码中。
无论如何,这里是产生错误的代码:
char* args[MAX_LINE/2 + 1]; /* command line (of 80) has max of 40 arguments */
int should_run = 1;
int i, upper;
while (should_run){
printf("osh>");
fflush(stdout);
scanf("%s", args); /* THIS CAUSES SEGFAULT */
char* localArgs[3];
char* pch;
/* ... */
在此先感谢您的帮助。学习 C 语言的内存管理是一段漫长的旅程。
最佳答案
您正在将一个指针数组传递给 scanf()
,它需要一个 char
数组。
如何使用 scanf()
的示例正确扫描文本字符串将是
char string[100];
if (scanf("%99s", string) == 1)
{
printf("scanned string: %s\n", string);
}
else
{
printf("error: unexepected error in `scanf()'.\n);
}
通读链接以理解为什么我像以前那样编写这段代码,如果你这样做,你将开始理解 scanf()
的工作原理,当你这样做时,你将开始编写更健壮的程序,并且可能也停止使用 scanf()
。
关于c - C 中带有 char* 数组的 scanf 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29755265/