这是我遇到的一个非常有趣的问题。我对堆栈溢出做了很多搜索,发现其他人也有类似的问题。所以我相应地编写了我的代码。我最初有 fscan()
和 strcmp()
,但那完全毁了我。所以其他帖子建议使用 fgets()
和 strncmp()
并使用长度来比较它们。
我试图通过打印出我的两个字符串的大小来调试我正在做的事情。我想,也许他们有 /n
漂浮在那里或其他东西并将其搞砸(另一篇文章谈到了这一点,但我认为这不会发生在这里)。因此,如果大小相同,则 strncmp()
的限制应该相同。正确的?只是为了确保它们应该被正确比较。现在,我知道如果字符串相同,它返回 0
否则返回负数 strncmp()
。但它不起作用。
这是我得到的输出:
perk
repk
Enter your guess: perk
Word size: 8 and Guess size: 8
Your guess is wrong
Enter your guess:
这是我的代码:
void guess(char *word, char *jumbleWord)
{
size_t wordLen = strlen(word);
size_t guessLen;
printf("word is: %s\n",word);
printf("jumble is: %s\n", jumbleWord);
char *guess = malloc(sizeof(char) * (MAX_WORD_LENGTH + 1));
do
{
printf("Enter your guess: ");
fgets(guess, MAX_WORD_LENGTH, stdin);
printf("\nword: -%s- and guess: -%s-", word, guess);
guessLen = strlen(guess);
//int size1 = strlen(word);
//int size2 = strlen(guess);
//printf("Word size: %d and Guess size: %d\n",size1,size2);
if(strncmp(guess,word,wordLen) == 0)
{
printf("Your guess is correct\n");
break;
}
}while(1);
}
我根据以下建议对其进行了更新。特别是在了解了 char *
作为指针和将某物作为 string 之间的区别之后。但是,它仍然给我同样的错误。
请注意 MAX_WORD_LENGTH
是我程序顶部使用的定义语句
#define MAX_WORD_LENGTH 25
最佳答案
使用strlen
,而不是sizeof
。此外,您不应在此处使用 strncmp
,如果您猜测的是单词的前缀,它将错误地报告匹配项。使用 strcmp
。
关于c - 为什么 fgets() 和 strncmp() 在此 C 代码中无法用于字符串比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11747579/