c - 为什么 fgets() 和 strncmp() 在此 C 代码中无法用于字符串比较?

标签 c string fgets c-strings strncmp

这是我遇到的一个非常有趣的问题。我对堆栈溢出做了很多搜索,发现其他人也有类似的问题。所以我相应地编写了我的代码。我最初有 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/

相关文章:

c - 在c中隐藏字符串

swift - 为什么使用 init(contentsOfFile :)? 创建字符串时会出现额外的换行符

c - 当文件流没有新数据时如何防止 fgets 阻塞

c - 将 printf 重定向到 IAR Embedded Workbench 上的控制台 I/O

c - 将 Matlab 翻译成 C 的困难

string - 我应该如何测试方法中的 null 和/或空字符串参数?

c - 在 C 中给定一个文件名,如何读取每行只有 75 个字符?

c - fgets 和错误处理的小麻烦

c - gcc 永久更改 c 标准

java - 为什么从用户输入中解析出的最大可测试整数为字符串 (10^8)-1?