2016-11-27 20 views
2

私は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); 

を変更した場合、私は私のコンピュータでプログラムを実行した後にエラーが出るということです。

+3

内容は、最初は未定義です。したがって、初期化されていないバッファ上で 'strlen'を実行すると、未定義の動作になります。 –

答えて

2

与えられたデータによっては、テストなしで、私は、エラーメッセージが便利かつ難解でもある「」あなたはSTRと言葉に初期化する必要があり

[...] 
char str[80] = ""; 
char word[80] = ""; 
fgets(str, 80, stdin); 
[...] 
0

を推測します。 ConditionalとUninitializedへの参照に注意してください。だから、コード内の条件( "if tests")を調べる必要があります。エラーで

次の行は、どこを見れする手がかりを与える:あなたはこのバッファを初期化しないため、行はword` `の18と6

関連する問題