2017-11-26 14 views
1

私のコードに少し問題があります。 私はCプロジェクトをプログラミングしていますが、別のものと全く同じサイズのフィールドを宣言する必要があります。問題は、私の最初の文字列(秘密)が7文字より長く、14文字と宣言するときです。ここで がラインです:配列宣言の問題

char guessedWord[strlen(secret)];

更新、私のようにそれを宣言しても:

char guessedWord[10]; 

そして秘密、それは14、WTFとして宣言する7よりも長いのですか?

void hangman(const char secret[]) //Samotna hra 
{ 
    int guesses=8; //zostavajuce pokusy 
    int iteration=0; //iteracia 
    char *lettersLeft="abcdefghijklmnopqrstuvwxyz"; //zostavajuce pismena 
    char letters_guessed[ALPHABET_LENGHT]; //uz hadane pismena 
    char input[100]; //vstupny znak 
    char guessedWord[8]; //Zobrazene slovo 

    for (int i=0; i < strlen(secret); i++) //inicializacia hadaneho slova 
    { 
     guessedWord[i]='_'; 
    } 
    for (int i=0; i < ALPHABET_LENGHT; i++) //inicializacia zoznamu hadanych pismen 
    { 
     letters_guessed[i]='_'; 
    } 

    printf("Guessed word init %s strlen of secret is %ld, secret is %s and strlen of guessedWord is %ld\n", guessedWord, strlen(secret), secret, strlen(guessedWord)); 
+2

は 'char guessedWord [strlen(secret)+1]'で始まります。第二に、あなたが言っていることが意味をなさないので、私たちは[mcve]を見る必要があります。 –

+0

完全なコードはどこにアップロードすればよいですか? – Luk164

+0

コード_、[mcve]の_completeではありません。問題を再現する最短コード。 –

答えて

1
char guessedWord[8]; //Zobrazene slovo 

for (int i=0; i < strlen(secret); i++) //inicializacia hadaneho slova 
{ 
    guessedWord[i]='_'; 
} 

strlenリテラルのサイズを知るために、コンパイラに問い合わせをしません:私はこのように書きますが機能に

(な長さを取得するためにstrlenを使用して)...それは不可能であるべきと思いました/配列(場合によってはsizeofで行うことができますが、制限があります)。終端ゼロを探すだけで、任意の文字列(文字上のポインタ)で動作することができます。あなたは文字& NULLで終了の適切な数を割り当てる必要が

そうではなく、あなたの文字列をNUL終端するguessedWord(未定義の動作)の境界外ゼロのためstrlen表情を作ることができます

int len = strlen(secret) 
char guessedWord[len+1]; //Zobrazene slovo 
int i; 
for (i=0; i < len; i++) //inicializacia hadaneho slova 
{ 
    guessedWord[i]='_'; 
} 
guessedWord[i] = '\0'; // i == len here 
+0

ありがとう、私はstrlen関数をよりthorouglyチェックする必要があります。 – Luk164

+0

タイマーがなくなったら、この回答を正しいとマークします – Luk164

+0

ありがとうございます。そして、あなたはすぐに良い質問をする方法を学び始めました。情報の少なさではなく、「コードの壁」ではありません。 –