gpt4 book ai didi

c - scanf 导致段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 05:18:45 25 4
gpt4 key购买 nike

gcc 编译得很好,但是一旦 scanf 接受一个字符串,它就会出现段错误。我有点不知所措。这是代码。

char *line[256];


void *mainThread()
{
while (*line != "quit") {
scanf("%s", *line);
printf("%s", *line);
}

return;
}

关于 scanf 有什么我不明白的地方吗?

最佳答案

首先,您分配的是一个指针数组给字符,而不是一个char数组:

char *line[256]; /* allocates 256 pointers to a character - 
(pointers are initialized to NULL) */

您需要分配一个字符数组:

char line[256]; /* allocates 256 characters */

其次,您需要使用 strcmp 来比较字符串 - 使用 !=,您正在比较存储在 line[0] 中的指针(地址) (与 *line 相同)带有指向字符串文字 "quit" 的指针,它们总是不同的。

您可以使用以下 sscce作为起点:

#include <string.h>
#include <stdio.h>

char line[256];

int main()
{
while (strcmp(line, "quit") != 0) {
scanf("%s", line);
printf("%s", line);
}

return 0;
}

一些补充说明:

  • 有关段错误的实际原因 的解释,请参阅@Joachims 的回答。
  • 你正在声明你的函数返回一个 void* 指针,但你没有返回任何东西(使用不带参数的 return)。然后,您只需将其声明为 void
  • 不要使用scanf() 来读取输入,因为它可能会读取比您分配的更多的字符,从而导致缓冲区溢出。请改用 fgets()。另见 Disadvantages of scanf .
  • 始终在启用所有警告的情况下进行编译,并认真对待它们 - 例如如果您使用的是 gcc,请使用 -Wall -pedantic 进行编译。

关于c - scanf 导致段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22191616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com