为什么两个字符串与equals ==运算符相比,即使输出相同也不匹配?

时间:2012-09-26 01:46:07

标签: c string character-encoding

  

可能重复:
  How to compare strings in an “if” statement?

我正在使用C.与equals ==运算符相比,我的两个字符串不匹配,即使std输出看起来相同。

考虑一个以整数数组开始的数组,我通过向每个整数添加一个'0'并加载到另一个char *数组中来转换为字符。

所以现在两个数组都是带有字符和相同std输出的字符数组,但我的“if”选择结构不能与它们匹配。我使用char *名称来引用每个数组。

如有必要,我可以发布整个代码。这是一个比较循环:

i=0;
pipx = (char*)malloc(sizeof(char));
sec = (char*)malloc(sizeof(char));

//for (b = 0; b < lengthx; b++){
    //reallocate a second array
    pipx = (char*)realloc(sec, ((i+1)*sizeof(char)) );
    sec = pipx;
    //add bitstr[b] to second array
    sec[i] = (char)bitstr[b] + '0';
    i++;

    for (m = 0; m < k; m++){
        printf("codex[m].bitx:%s", codex[m].bitx);
        printf("sec:%s|\n", sec);
        printf("seclen: %i", (int)strlen(sec));
        printf("codex[m].bitxlen: %i\n", (int)strlen(codex[m].bitx));
        if ((char*)sec == (char*)codex[m].bitx){
            printf("This should output: %s", sec);
            printf("Here ---------------------- Here");
            //allocate the second array to zero
            i=0;
            sec = (char*)malloc(0);
        }
    }
}

3 个答案:

答案 0 :(得分:4)

为了比较字符串,您需要使用strcmp代替==

==验证它们指向相同的地址,而strcmp将比较两个字符*并且如果每个字符匹配则返回true,直到它到达\0

答案 1 :(得分:1)

那是因为您正在比较以查看两个变量是否指向相同的内存地址,而不是两个内存地址的信息是否相同。 总是使用strcmp

答案 2 :(得分:0)

您正在比较文字指针值而不是指针指向的字符串。

正如其他人所说,查找strcmp()和朋友。