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



所以这是我的代码:

int c;
char b[c];
scanf("%s",b);
c=strlen(b);
printf("n");
printf("%sn",b);

当我执行它时,它会不断给我一个"分段故障(核心倾倒("错误。我不想在手动之前定义字符串大小。我希望该程序在写完字符串后确定。

所有帮助都非常感谢。

这个

int c;
char b[c];

为您提供未定义的行为,因为c不是初始化的,而是用作b的数组大小。未定义的行为意味着事后发生的任何事情,包括一段时间的运行正常,然后再倾倒核心。

听起来您想要的是从输入中确定字符串长度,但是yout在C中的数组无法做到这一点,因为阵列大小是恒定的,在声明数组时确定。相反,您需要使用动态分配的缓冲区,并在阅读字符串时适当地调整大小。如果您使用的是POSIX,则可以让STDIO库在SCANF调用上使用m修饰符为您执行此操作:

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

如果您不使用POSIX C,则需要首先分配比可能需要的缓冲区大(并且以后调整大小(或根本不使用scanf

最新更新