0
所以这是我的代码:STRLEN()函数给“段错误”的错误
int c;
char b[c];
scanf("%s",b);
c=strlen(b);
printf("\n");
printf("%s\n",b);
当我执行它,它不断给我一个“分段错误(核心转储)”的错误。我不想事先定义字符串大小。我希望程序在完成字符串写入后确定它。
非常感谢所有帮助。
所以这是我的代码:STRLEN()函数给“段错误”的错误
int c;
char b[c];
scanf("%s",b);
c=strlen(b);
printf("\n");
printf("%s\n",b);
当我执行它,它不断给我一个“分段错误(核心转储)”的错误。我不想事先定义字符串大小。我希望程序在完成字符串写入后确定它。
非常感谢所有帮助。
这
int c;
char b[c];
给你未定义行为,因为c
没有初始化,但随后被用作数组大小为b
。未定义的行为意味着之后会发生任何事情,包括稍后运行正常,然后进行核心转储。
这听起来像你想要的是确定从输入字符串的长度,但YOUT不能做到这一点与C中的数组,数组大小是不变的,数组声明时确定。相反,您需要使用动态分配的缓冲区,在读取字符串时适当调整大小。如果您使用POSIX,可以让stdio库为你做的与m
修改您的通话scanf函数:
char *b;
if (scanf("%ms", &b) > 0) {
printf("%s\n", b);
free(b); }
如果你不使用POSIX C,你,而不是需要首先分配做大比可能需要的缓冲区(并且可选地随后调整其大小)或根本不使用scanf
。
感谢您的快速反应。我的程序应该是:提示我写一个字符串,其中包含尽可能多的字符,然后确定该字符串的大小,从而用它的实际大小更新“b”。我不想预先声明大小,也没有建立任何限制。 – Britovski