Strlen() 函数给出 "Segmentation Fault" 错误

Strlen() function giving "Segmentation Fault" error

所以这是我的代码:

int c;
char b[c];

scanf("%s",b);
c=strlen(b);

printf("\n");
printf("%s\n",b);

当我执行它时,它一直给我一个 "Segmentation Fault (core dumped)" 错误。我不想事先定义字符串大小。我希望程序在我写完字符串后确定它。

非常感谢所有帮助。

这个

int c;
char b[c];

给你未定义的行为,因为 c 未初始化,但随后用作 b 的数组大小。未定义的行为意味着之后可能会发生任何事情,包括 运行 暂时正常,然后稍后进行核心转储。

听起来你想要的是确定输入的字符串长度,但你不能用 C 中的数组来做到这一点,因为数组大小是常量,在声明数组时确定。相反,您需要使用一个动态分配的缓冲区,您可以在读取字符串时根据需要调整大小。如果您正在使用 POSIX,您可以让 stdio 库为您在 scanf 调用中使用 m 修饰符来执行此操作:

char *b;
if (scanf("%ms", &b) > 0) {
    printf("%s\n", b);
    free(b); }

如果您不使用 POSIX C,则需要首先分配一个比可能需要的缓冲区更大的缓冲区(并可选择稍后调整它的大小)或者根本不使用 scanf