C 平等性检查不存在';I don’我没有按预期工作

C 平等性检查不存在';I don’我没有按预期工作,c,string,C,String,正如您在下面的示例中所看到的,我正在比较lyric变量中的单词,我希望得到count的唯一单词,但结果返回0。虽然在结果中有3个类似的单词,但它并没有进入if块。什么会导致这个问题 您可以快速通过应用程序进行测试 来源 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char* argv[]) { char lyric[] ="lorem i

正如您在下面的示例中所看到的,我正在比较lyric变量中的单词,我希望得到count的唯一单词,但结果返回
0
。虽然在结果中有3个类似的单词,但它并没有进入if块。什么会导致这个问题

您可以快速通过应用程序进行测试

来源

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

int main(int argc, char* argv[]) {

    char lyric[] ="lorem ipsum is printing\nlorem ipsum is letters";
    int i = 0, j = 0, k = 0, y = 0, l = 0, s = 0;

    s = sizeof(lyric)/sizeof(char);

    for(k; k<s; ++k)
    {
        if(lyric[k] == ' ')
            ++l;

        if(lyric[k] == '\n')
            ++l;
    }

    char *row;
    char *temp[l];

    row = strtok (lyric," \n");

    while (row != NULL)
    {
        temp[i++] = row;
        row = strtok (NULL, " \n");
    }

    for (i=0;i<l; ++i){
        for (j=(i+1);j<l; ++j){

            printf("%s == %s\n", temp[i], temp[j]);
            if(temp[i] == temp[j]){
                y++;
            }
        }
    }

    printf("Unique word count : %d",y);

    return 0;
}
在代码中

temp[i] == temp[j]
不会像预期的那样工作,因为操作数是指针,您需要的是比较指针指向的内存内容,而不是指针本身


您需要使用来执行比较。

这里的问题是,您的比较涉及两个指针,即temp[i]和temp[j]只不过是指向内存的指针 您需要比较的是这些指针所指向的值,您可以使用星号(*)运算符取消对指针的引用,即 (*temp[i])和(*temp[j]),或者如果您不想手动执行,则 如前所述,使用strcmp。 参考此

我无意否定你的回答,但你怎么知道它没有按预期工作?我甚至无法从这篇文章中提取出他所期望的内容。@Olaf编辑后添加了一点澄清,现在听起来还好吗?@Zaibis好吧,我参考了之前的printf声明和o/p,仅此而已。@Zaibis:Clarivoyance;-)严肃地说:这是一个典型的初学者错误(通常是因为他们没有正确地阅读/理解这本书,或者没有按照课程进行操作)。
temp[i] == temp[j]