首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拼字游戏小程序中的堆栈崩溃

拼字游戏小程序中的堆栈崩溃
EN

Stack Overflow用户
提问于 2017-04-11 14:05:55
回答 2查看 212关注 0票数 0

下面是一个名为scrabble.c的程序的代码片段,该程序用于玩游戏的简化版本。给用户7个随机字符,然后告诉用户使用这些字符输入一个单词。我在接受用户输入并将其存储在数组中的函数有问题。

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

代码语言:javascript
复制
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终止已中止核心转储。“

为什么会检测到堆栈崩溃?

代码语言:javascript
复制
}

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;
 }
EN

回答 2

Stack Overflow用户

发布于 2017-04-11 14:11:24

您可以同时使用以下两种方法调用函数:

代码语言:javascript
复制
&letter_set[7]
&word[7]

这是指向7个int/character数组中第八个int/character的指针。只需在调用函数时使用letter_setword即可。当您的代码开始写入数组时,您的堆栈可能会崩溃。同样,函数原型会更好,如下所示:

代码语言:javascript
复制
int read_word(char word[], int max_size_word)

7在那里没有做任何特别的事情,所以就把它去掉吧。

票数 1
EN

Stack Overflow用户

发布于 2017-04-11 14:13:10

问题就在这里

代码语言:javascript
复制
read_word(&word[7], 7);

您将向read_word传递的不是您可能认为的大小为7的数组word的地址,而是word[7]的地址,该地址指向word第8个字符,该字符位于边界之外。

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

代码语言:javascript
复制
read_word(&word[0], 7);

代码语言:javascript
复制
read_word(word, 7);

generate_letter_set(&letter_set[7], size_letter_set, num_letters);也是如此

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43337920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档