gpt4 book ai didi

C 程序在 do while 循环中崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:37 25 4
gpt4 key购买 nike

我正在尝试创建一个刽子手游戏,但我的程序在进入 for 循环时一直崩溃。我仍在阅读有关指针的信息,但并不完全理解它们。我知道你不能修改字符串文字,所以我尝试制作可修改的数组,但我很确定崩溃与此有关。谁能指出崩溃的具体原因?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main(int argc, char **argv)
{
char word[15];
char *wordState = malloc(15);
char *guess[1];
int guesses = 6;
int i;
printf("Enter word.\0");
scanf("%s",word);
strcpy(wordState, "---------------");
do{
printf("Please guess a letter.\0");
printf("You have %d\n guesses.\0", guesses);
scanf("%s\n",guess);
printf("%s\n", wordState);
for(i=0; word[i] != '\0'; i++)
{
if(*guess[1]==word[i])
{
strcpy(*wordState[i],*guess[1]);
}
else
{
guesses--;
}
}
}while(guesses != 0);

free(wordState);

最佳答案

大多数情况下,您的问题是因为,

strcpy(wordState, "---------------");

因为您没有足够的空间来复制 \0 并且实际上造成了内存溢出。

同样,使用 char *guess[1]; 这样的定义,使用

if(*guess[1]==word[i])

undefined behaviour , 因为

  1. C 数组是基于0 的。 [想一想:无论如何,您为什么需要 1 元素数组?]
  2. 您正在使用未初始化的内存。

还有一些其他问题我可以注意到,比如

  1. void main(int argc, char **argv) 应该是 int main(int argc, char **argv)
  2. 您没有检查 malloc() 是否成功
  3. scanf("%s",word); 应该是 scanf("%14s",word); 以避免可能的缓冲区溢出 longer 输入。

关于C 程序在 do while 循环中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31541472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com