以下是来自名为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;
}
答案 0 :(得分:1)
你用两个函数调用函数:
&letter_set[7]
&word[7]
这是指向7个int / character数组中第8个int /字符的指针。调用函数时只需使用letter_set
和word
即可。当您的代码开始写入数组时,您的堆栈可能会被粉碎。同样,函数原型会更好:
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);