-3
#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;
}

このコードは、入力が「末尾のスペース」のように小さい場合は問題なく動作しますが、「末尾のスペースが削除されました」のような大きな入力ではクラッシュします。これがなぜ起こっているのかわかりませんので、助けてください。このプログラムは、文字列の末尾にある末尾のスペースを削除します。

4

1 に答える 1

1

str初期化されず、ジャンク データを指しているためです。

あなたは幸運で、これは未定義の動作です

代わりに、malloc()メモリを動的に割り当てるために使用するstrと、それでうまくいくと思います。

このような:char *str = malloc(100); // say for 100 characters

len100 以下になります ('\0' を含む必要があります)。

また、使用gets()は悪い考えです。代わりに使用fgets()またはgets_s()関数

于 2013-01-26T23:20:47.950 に答える