gpt4 book ai didi

c - 为什么我的字符串打印了两次?

转载 作者:太空宇宙 更新时间:2023-11-04 00:44:44 24 4
gpt4 key购买 nike

我想创建一个随机化字符串的游戏,用户必须猜测原始字符串是什么,但是当我显示随机化的字符串时,它会打印两次。一次随机一次不随机。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int checkWin(char guess[], char word[]);
void jumble(char array[]);
int main()
{
srand(time(NULL));
char word[5] = {'h', 'e', 'l', 'l', 'o'};
char scramble[5] = {'h', 'e', 'l', 'l', 'o'};
char guess[5];
jumble(scramble);
printf("The jumled word is: %s\n",scramble);
printf("Enter a guess: ");
for(int i = 0; i < 5; i ++)
{
scanf(" %c",&guess[i]);
}
printf("\n");
if(checkWin(guess,word))
printf("You win!");
else
printf("You lose");
}
void jumble(char array[])
{
int a,b,c;
for(a = 1; a<6; a++)
{
b = rand()%5;
c = rand() %5;
if(b==c)
{
a--;
continue;
}
char temp = array[b];
array[b] = array[c];
array[c] = temp;
}
}
int checkWin(char guess[], char word[])
{
int a = 0;
for(int i = 0; i < 5; i ++)
{
if(guess[i] == word[i])
a++;
}
if(a==5)
return 1;
else
return 0;
}

当用户猜测字符串时它工作正常但是当我尝试显示加扰的字符串时我得到类似的东西:

The jumled word is: ollehhello"
Enter a guess: hello

You win!
Process returned 0 (0x0) execution time : 9.645 s
Press any key to continue.

我不知道字符串出了什么问题,所以任何帮助将不胜感激。

最佳答案

您的字符串不是 NUL 终止的,因此 %s 格式代码正在通过它们运行(如果没有对齐,堆栈变量通常背靠背布置需要填充,尽管这绝不是标准所保证的)直到它最终巧合地找到一个 NUL 字节(在另一个编译器上,它可能会打印出更多的乱码或崩溃)。

要修复,请使用字符串文字(隐式添加 \0),手动添加 \0,或者将它们的大小设置为比您初始化的大一倍(额外的元素隐式归零)例如:

// Not declaring sizes; the arrays size based on the literal to size 6
char word[] = "hello";
char scramble[] = "hello";

// Again, autosizing to 6
char word[] = {'h', 'e', 'l', 'l', 'o', '\0'};
char scramble[] = {'h', 'e', 'l', 'l', 'o', '\0'};

// Explicit sizing to 6, implicit initialization of uninitialized element to 0
char word[6] = {'h', 'e', 'l', 'l', 'o'};
char scramble[6] = {'h', 'e', 'l', 'l', 'o'};

关于c - 为什么我的字符串打印了两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46922996/

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