首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串值= "clay“是否自动更改为"/000lay"?

字符串值= "clay“是否自动更改为"/000lay"?
EN

Stack Overflow用户
提问于 2016-04-05 17:23:46
回答 1查看 59关注 0票数 2

我正在试着用Cows and Bulls game word版本做一个C程序

这是我的代码:

代码语言:javascript
复制
#include<stdio.h>
#include<conio.h>
void main()
{
    char word[4],guess[4];
    int i,j,check=0,b=0,c=0,d[4];
    system("cls");
    printf("Welcome to the Cows and Bulls game!\n\nEnter a 4 letter word to be guessed :- ");
    scanf("%s",word);
    while(check==0)
    {
        printf("\nEnter your guess :- ");
        scanf("%s",guess);
        for(i=0;i<4;i++)
        {
            for(j=0;j<4;j++)
            {
                if(i==j && word[i]==guess[j])
                {
                    b++;
                    d[j]=j;
                    break;
                }
                else if(word[i]==guess[j] && j!=d[j])
                {
                    c++;
                    break;
                }
            }
        }
        printf("%d cow(s) and %d bull(s)!\n",c,b);
        if(b==4)
        {
            printf("Congratulations! You have correctly guessed %s",word);
            check=1;
        }
        else
        {
            check=0;
        }
    }
    getch();
}

但是我遇到的问题是,假设我把单词"clay“放在要猜测的地方,但是一旦编译器接受了猜测单词的值,前面给出的单词"clay”就变成了"/000lay“,这就完全搞砸了程序。我可以在调试时看到这一点。

Here's the image

为什么会发生这种情况?如有任何帮助,我们不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2016-04-05 17:35:31

您不会为最后的NUL终止符('\0')预留空间,当输入大于或等于4个字符时,最终会通过scanf调用未定义的行为。变化

代码语言:javascript
复制
char word[4],guess[4];

代码语言:javascript
复制
char word[5], guess[5];

其他建议和评论:

  • system需要stdlib.h。包括it.
  • conio.h (和getch) non-standard.
  • void main()不是main的标准签名。请改用int main(void)。您还需要在main的末尾添加return 0; (这在scanf("%s",word);的C99+)
  • Instead中是隐式的,请使用

if(1 != scanf("%4s",word)) /*检查scanf是否成功;4防止缓冲区溢出*/ {fput(“扫描word失败;正在退出...”,标准错误)退出(-1);}

同样,对于guess.

  • It的scanf,最好初始化所有变量。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36422193

复制
相关文章

相似问题

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