私はC言語から始まり、私が書いたコードを自動的にチェックするプラットフォームを介して学習しています(例えば、私が書いたものが意味のある結果をもたらすかどうかを確認するコード)。C:文字列とその長さの中で最も長い単語を印刷する
これまでのところすべてうまくいっていますが、私の目には私が解決した問題が残っていますが、コードをアップロードして実行した後、率直に理解できないエラーが発生します。
TASK:最も長い単語を文章とその長さで印刷します。
私の試み:例えば
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[80], word[80];
fgets(str, 80, stdin);
char *token;
//tokenizing array str
token = strtok(str, " ");
while(token != NULL)
{
if(strlen(word) < strlen(token))
{
strcpy(word, token);
}
token = strtok(NULL, " ");
}
printf("%s %d", word, strlen(word));
return 0;
}
1は
hello my name is jacksparrowjunior goodbye
を書き込むと1は
jacksparrowjunior 17
を取得し、エラーはこれです:
TEST
PASSED
==20760== Conditional jump or move depends on uninitialised value(s)
==20760== at 0x4006B9: main (004799.c:18)
==20760== Uninitialised value was created by a stack allocation
==20760== at 0x400660: main (004799.c:6)
==20760==
==20760== Conditional jump or move depends on uninitialised value(s)
==20760== at 0x4006E5: main (004799.c:18)
==20760== Uninitialised value was created by a stack allocation
==20760== at 0x400660: main (004799.c:6)
==20760==
私は気づいた他の事は、私が
char str[1000], word[1000];
fgets(str,1000, stdin);
に
char str[80], word[80];
fgets(str, 80, stdin);
を変更した場合、私は私のコンピュータでプログラムを実行した後にエラーが出るということです。
内容は、最初は未定義です。したがって、初期化されていないバッファ上で 'strlen'を実行すると、未定義の動作になります。 –