0

以下のプログラムは、目的の出力 (連続する 3 行のワード数をカウント) を提供しますが、「実行時チェックの失敗 #2 - 変数 'str' の周りのスタックが破損しています」というメッセージが表示され、ハングします。試してみましたが、解決策が見つかりませんでした。ありがとう

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

int i,count=0;

int main(void){

char str[3][1000];
char *ptr;

//Get user input
puts("Enter three lines:");
for (i = 0; i < 3; i++)
{
    gets(&str[i][1000]);
}

for (i = 0; i < 3; i++)
{
    ptr=strtok(&str[i][1000]," ");
    count++;

    while (ptr!=NULL)
    {
        ptr=strtok(NULL, " ");

        if (ptr!=NULL)
        {
            count++;
        }
    }
}

printf("%d words", count);
getch();

}
4

3 に答える 3

2

この行gets(&str[i][1000]);

 gets(str[i]);

しかし、gets()非推奨であるため、実際に使用する必要があります

fgets (str[i], 1000, stdin);


同様のエラーがこの行に表示されますptr=strtok(&str[i][1000]," ");

于 2013-09-12T14:19:36.167 に答える
1

これ:

gets(&str[i][1000]);

は非常に間違っていgets()ます。各行の最後の文字へのポインターを提供しますが、(最後の行には) スペースがありません。

そのはず:

if(fgets(str[i], sizeof str[i], stdin) == NULL)
{
  fprintf(stderr, "**Failed to read line %d\n", i);
  exit(1);
}

の方がはるかに安全であることに注意してください。fgets()使用を避ける必要がありますgets()。また、戻り値をチェックして、成功したことを確認する必要があります。

于 2013-09-12T14:22:23.190 に答える