c - C 中带有 char* 数组的 scanf 段错误

标签 c segmentation-fault scanf

我正在阅读一本关于操作系统的书,书中的一些示例代码给我一个运行时段错误。我是从 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/

相关文章:

c - 为什么我的 C 程序会产生奇怪的 printf 输出?

c - 将缓冲区的N个字节写入文件

c - open()系统调用头文件要求

c - 分段故障

c - 在 C 的同一行中读取字符串和各种整数

c - printf scanf 函数和 fflush()

c - 如何用C语言编辑EXIF标签?

c - 从 argv[] 获取特定的字符值并创建一个新的 const char

c++ - 在嵌入式 Linux 平台上使用 std::string 时出现段错误

c++ - 循环打印时出现段错误