在拼字游戏迷你游戏程序中砸碎

时间:2017-04-11 06:05:55

标签: c

以下是来自名为scrabble.c的程序的代码片段,该程序用于播放游戏的简化版本。向用户发出7个随机字符,然后告诉用这些字符输入单词。我遇到了一个带有用户输入并将其存储在数组中的函数的问题。

此功能应提示用户输入一个单词,然后读取它,并将其逐字符存储在数组“word”中。该函数还应返回用户输入的单词的大小(输入的字母数)。

int read_word(char word[7], int max_size_word)
{
int c = 0, input_count = 0;
printf("Please enter your word : ");

char user_input = getchar();
for(c = 0; c < max_size_word; c++)
{
    if(user_input != '\n')
    {
    word[input_count] = user_input; 
    input_count++;
    printf("input_count = %d, letter entered = %c\n", input_count, 
user_input);
    }
    else if(user_input == '\n')
    {
    return input_count;
    }
    user_input = getchar();
}
return input_count;

//错误发生在这里。错误:检测到堆栈粉碎./scrabble终止中止核心转储。“

为什么要检测堆栈粉碎?

}

int main(void)
{
int t;
int letter_set[7] = {0};
char word[7];
int size_letter_set = 100;
int num_letters = 7;

generate_letter_set(&letter_set[7], size_letter_set, num_letters);
read_word(&word[7], 7);
printf("printing word : ");

for(t=0; t < 7; t++)
{
    printf("%c", word[t]);
}
    printf("\n");


 return 0;
 }

2 个答案:

答案 0 :(得分:1)

你用两个函数调用函数:

&letter_set[7]
&word[7]

这是指向7个int / character数组中第8个int /字符的指针。调用函数时只需使用letter_setword即可。当您的代码开始写入数组时,您的堆栈可能会被粉碎。同样,函数原型会更好:

int read_word(char word[], int max_size_word)

7并没有做任何特别的事情,所以请放弃它。

答案 1 :(得分:1)

问题出在这里

read_word(&word[7], 7);

您传递给read_word而不是您可能想到的大小为7的数组word的地址,但word[7]的地址指向第8位 word的字符超出边界。

要传递数组地址,请写下以下内容:

read_word(&word[0], 7);

read_word(word, 7);

关于generate_letter_set(&letter_set[7], size_letter_set, num_letters);

也是如此