程序崩溃,无法解释原因?

时间:2014-11-08 07:35:18

标签: c arrays string pointers

    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    int compare(char word[], char mystery[])
    {
        int i=0;int bool=1;
        while((i<=20)&&(bool==1))
        {
            if (word[i]==mystery[i])
                i++;
            else
                bool=0;
        }
        return bool;
    }
    char readCharacter()
    {
        char character = 0;

        character = getchar();
        character = toupper(character);
        while (getchar() != '\n') ;
        return character;
    }
    void readString(char *word,char *mystery)
{
    int i=0;
    printf("Enter the word to guess : ");
    scanf("%s",word);
    while(*((word)+(i)) != '\0')
    {
        *((word)+(i))= toupper(*(word+i));
        *((mystery)+(i))='*';
        i++;
    }
    *(mystery+i)='\0';
}
void process(char *word,char *mystery,char letter,int *change)
{
    int i=0;
    while (*((word)+(i))!= '\0')
    {
        if (*((word)+(i))==letter)
        {
            *((mystery)+(i))=letter;
            *change=1;
        }
        i++;

    }

}
    void test(char *word,char *mystery, int triesleft)
    {
        if (*mystery!=*word)
            {
                printf("The mystery word is : %s",*mystery);
                printf("\n You have %d tries left.", triesleft);
            }
         else
         {
              printf("You won !");
         }
    }
    int main()
    {
        int triesleft = 10; int change=0;
        char word[20]; char mystery[20];char letter;
        readString(&word,&mystery);
        while((compare(word,mystery)==0) && (triesleft>0))
        {
            change=0;
            printf("Enter the letter :");
            letter=readCharacter();
            process(&word,&mystery,letter,&change);
            if ((change)==1)
                triesleft--;
            test(&word,&mystery,triesleft);
        }
        if (triesleft>0)
            return 0;
        printf("You lost.");
        return 1;

    }

我是C的初学者,我想在C中编写一个简单的Hangman游戏并且编译得很好但是在输入第一个字母后似乎崩溃了,我找不到解决方案! 我不知道可能是什么原因,但我在C中使用字符串时遇到了很多麻烦,因为它们不存在可能是我不知道的一个不好的操作:/

3 个答案:

答案 0 :(得分:1)

您第一次致电readString就足以让该程序崩溃。

wordmystery是数组,因此&wordchar **而不是char *。你应该使用

readString(word, mystery);

但编译器应该发出警告。警告不是为了分散初学者的注意力,以表示可能的(如果你不理解警告可能)错误。

以后可能还有其他问题......

答案 1 :(得分:0)

readString()函数中,您应该使用&#39; \ 0&#39; 而不是 NULL 作为C字符串以这个角色结束。

答案 2 :(得分:0)

您不能声明名为bool的变量,因为它是一种类型。在C中,实际上没有为所有编译器定义,因为bool不是标准的一部分,但是一些编译器和某个平台无论如何都会定义它