2017-05-29 60 views
0

所以这是我的代码:STRLEN()函数给“段错误”的错误

int c; 
char b[c]; 

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

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

当我执行它,它不断给我一个“分段错误(核心转储)”的错误。我不想事先定义字符串大小。我希望程序在完成字符串写入后确定它。

非常感谢所有帮助。

回答

0

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

+0

感谢您的快速反应。我的程序应该是:提示我写一个字符串,其中包含尽可能多的字符,然后确定该字符串的大小,从而用它的实际大小更新“b”。我不想预先声明大小,也没有建立任何限制。 – Britovski