此程序适用于小数据输入,但在大字符串被输入时会产生运行时错误。为什么..?

时间:2013-01-26 23:18:50

标签: c string pointers

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char* str;
int i;
printf("Enter the String:\n");
gets(str);
int len=strlen(str)-1;
while(len>0&& isspace(str[len]))
len--;
str[len+1]='\0';
printf("Output string:\n%s\n",str);
return 0;
}

这个代码在输入很小的时候工作得很好,就像“跟踪空间”一样,但是在“拖尾空间删除”这样的大输入上崩溃了。我知道发生这种情况所以请帮助我。此程序删除字符串末尾的尾随空格。

1 个答案:

答案 0 :(得分:1)

因为str永远不会被初始化并指向垃圾数据。

你很幸运,这是未定义的行为

而是使用malloc()str动态分配内存,我猜它。

像这样:char *str = malloc(100); // say for 100 characters

len将小于或等于100(并应包含'\ 0')

另请注意,使用gets()是一个坏主意。而是使用fgets()gets_s()函数