下面是一个名为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;
}发布于 2017-04-11 14:11:24
您可以同时使用以下两种方法调用函数:
&letter_set[7]
&word[7]这是指向7个int/character数组中第八个int/character的指针。只需在调用函数时使用letter_set和word即可。当您的代码开始写入数组时,您的堆栈可能会崩溃。同样,函数原型会更好,如下所示:
int read_word(char word[], int max_size_word)7在那里没有做任何特别的事情,所以就把它去掉吧。
发布于 2017-04-11 14:13:10
问题就在这里
read_word(&word[7], 7);您将向read_word传递的不是您可能认为的大小为7的数组word的地址,而是word[7]的地址,该地址指向word的第8个字符,该字符位于边界之外。
要传递数组地址,请写入以下内容:
read_word(&word[0], 7);或
read_word(word, 7);generate_letter_set(&letter_set[7], size_letter_set, num_letters);也是如此
https://stackoverflow.com/questions/43337920
复制相似问题