所以这是我的代码:
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
。