比较C中两个char数组的内容
Compare the content of two char arrays in C
当我尝试比较两个字符数组的内容时遇到问题。
有时
如果字符串小于数组的实际大小,则其中没有 '\0' 序列,但通常会有意外字符(在 xcode 调试中有 '\x01' 字符,在我使用的控制循环来检查数组的存储单元是否与另一个相同,但不相同)。因此,为了克服这个问题,我决定强制用户将数组内容准确地写为数组大小(-1):ex。 array[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;
}
我不确定这是否是您要问的,但是如果不给代码一个停止序列(如 \0),就无法浏览 C 中的字符数组,否则您将永远浏览它(好吧,直到出现严重的段错误......)
您可以为此编写自己的 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;
}
这将 return 如果满足您的字符 c,或者字符串不同,则为 0,或者如果字符串在最大字符之前相同,则为 1。只需确保满足两个条件之一,否则您的代码将崩溃为段错误/具有未定义的行为,因为您将浏览超出允许的内存范围。
函数 strcmp()
和 strncmp()
就是为这个确切的操作而设计的,。
您可以阅读这两个函数的 man
页面以了解所有详细信息。
当我尝试比较两个字符数组的内容时遇到问题。 有时 如果字符串小于数组的实际大小,则其中没有 '\0' 序列,但通常会有意外字符(在 xcode 调试中有 '\x01' 字符,在我使用的控制循环来检查数组的存储单元是否与另一个相同,但不相同)。因此,为了克服这个问题,我决定强制用户将数组内容准确地写为数组大小(-1):ex。 array[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;
}
我不确定这是否是您要问的,但是如果不给代码一个停止序列(如 \0),就无法浏览 C 中的字符数组,否则您将永远浏览它(好吧,直到出现严重的段错误......)
您可以为此编写自己的 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;
}
这将 return 如果满足您的字符 c,或者字符串不同,则为 0,或者如果字符串在最大字符之前相同,则为 1。只需确保满足两个条件之一,否则您的代码将崩溃为段错误/具有未定义的行为,因为您将浏览超出允许的内存范围。
函数 strcmp()
和 strncmp()
就是为这个确切的操作而设计的,。
您可以阅读这两个函数的 man
页面以了解所有详细信息。