2017-11-26 16 views
1

내 코드에 약간의 문제가 있습니다. C 프로젝트를 프로그래밍 중이고 다른 필드와 정확히 같은 크기의 필드를 선언해야합니다. 문제는 내 초기 문자열 (비밀)이 14 자보다 7자를 초과 할 때 발생합니다. 내가로 선언해도,배열 선언 관련 문제

char guessedWord[strlen(secret)];

업데이트 :

char guessedWord[10]; 

그리고 비밀은 14 일 WTF로 선언 이상 7보다 여기 라인입니까? 나는 그것이 불가능한다고 생각 ...

기능을 (점점 아이폰에 대한 strlen 함수를 사용하여) 다음과 같이 진행됩니다

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]입니다. 문제를 재현하는 가장 짧은 코드. –

답변

1
char guessedWord[8]; //Zobrazene slovo 

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

strlen는 문자의 크기를 알고 컴파일러를 심문하지 않습니다/배열 (어떤 경우에는 sizeof으로 할 수 있지만 제한이 있습니다). 그것은 단지 끝나는 0을 찾는다. 그래서 어떤 문자열 (chars에 대한 포인터)에 대해서도 작동 할 수있다.

그래서,하지 NUL - 종료 당신의 문자열은 & 널 (null)이-종료 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

덕분에이 대답을 올바르게 표시 할 것입니다. 그리고 이제는 좋은 질문을하는 법을 배우기 시작했습니다. 너무 적은 정보가 아니라 "코드 벽"입니다. –