比较C中两个char数组的内容

时间:2017-05-24 14:02:59

标签: c arrays initialization string-comparison

当我尝试比较两个char数组的内容时,我遇到了问题。 有时 如果字符串小于数组的实际大小,其中没有'\ 0'的序列,但通常有意外的字符(在xcode调试中有'\ x01'字符,在我使用的控制循环中要检查阵列的存储器单元是否与另一个存储器单元相同,它是不一样的。因此,为了克服这个问题,我决定强制用户将数组内容写成数组大小(-1):ex。数组[3],用户写“hi”(不带“”)。所以我想知道是否有一种方法来比较两个字符串(我不是在讨论长度而是内容)而没有完全填充数组,以便通过一个简单的循环来比较两个数组中的中心代码的内容。 (我当时正在考虑使用\ 0初始化向量,但我不知道是否存在问题) 谢谢你的回答

这是代码

的一个例子
}while(sent !=1);


for(contatore=0; contatore<MAXNOME; contatore++){

    if(UserName[contatore] ==  persona.username[contatore]){

        controlloUsr++;
    }

}


for(contatore=0; contatore<MAXNOME; contatore++){

    if(password[contatore] ==  persona.password[contatore]){

                    controlloPsw++;
    }

}


if(controlloUsr == MAXNOME && controlloPsw == MAXPSW){

   return 1;

} else {

    return 0;
}

2 个答案:

答案 0 :(得分:1)

我不确定这是不是你要问的,但是没有办法在C中浏览一个字符数组而不给代码一个停止序列,比如\ 0,或者你将永远浏览它(好吧) ,直到出现狂野的段错误...)

您可以为此编写自己的strncmp函数,例如:

int my_strncmp(char *str1, char *str2, size_t max, char c)
{
    size_t n = 0;
    while (n < max)
    {
         if ((str1[n] != str2[n]) || (str1[n] == c) || (str2[n] == c))
             return 0;
         n++;
    }
    return 1;
}

如果符合您的char,或者字符串不同,则返回0;如果字符串在max char之前相同,则返回1。只要确保满足这两个条件之一,否则您的代码将崩溃为段错误/具有未定义的行为,因为您将浏览您允许的内存范围。

答案 1 :(得分:0)

函数strcmp()strncmp()用于此操作,。

您可以阅读这两个功能的man页面了解所有详细信息。