分段错误和地址清理器

时间:2019-09-07 18:27:32

标签: c fgets strtok segmentation-fault address-sanitizer

我的代码中发生了一些奇怪的事情。 我使用fgets获取文件的每一行,然后使用strtok进行解析。使用Ubuntu,如果我使用gcc -o name name.c进行编译,则会得到segmentation fault。如果我使用-fsanitize=address进行编译,则代码可以完美运行而无需任何segv。可能是什么问题?

代码是:

char* input;
fgets(input, 1000, stdin);
tok=strtok(input, pars);

但它似乎停在fgets

1 个答案:

答案 0 :(得分:1)

  

可能是什么问题?

您的专线

char* input;

只声明一个指向char的指针,而没有为其分配地址。您认为它将指向何处?

然后您要

fgets(input, 1000, stdin);

最多999个字符,但您永远不能为它们提供空格。

如果将第一行更改为

char input[1000];

它将正常工作,而不会出现细分错误。