c语言 - 为什么此函数不能成功确定两个任意字符串是否相同?



我写了一个简单的函数,它应该返回用户提供的两个字符串是否相同。 也就是说,如果它们是,它应该返回1,如果不是,它应该返回0

这是一个具有该功能的简单可运行程序,请检查它并指出问题所在。

#include <stdio.h>
int compare_strings(char string0[], char string1[])
{
int success = 0;
if (sizeof(string0)/sizeof(char) == sizeof(string1)/sizeof(char))
{   
success = 1;
for (int i = 0;i < sizeof(string0)/sizeof(char);i++)
{   
if (string0[i] != string1[i])
{   
success = 0;
break;
}   
}   
}   
return success;
}
void main(int argc, char **argv)
{
if (argc >= 3)
{   
int yes_or_no = compare_strings(argv[1], argv[2]);
if (yes_or_no == 0)
{   
printf("FALSEn");
}   
else
{   
printf("TRUEn");
}   
}   
else
{   
printf("I need at least two parameters!n");
}   
}

这只决定了指向char的指针的大小,这是字符数组作为函数参数衰减到的大小。

sizeof(string0)

为了进行字符串长度比较(当然假设 0 终止的序列为char(,您需要使用

strlen(string0)

然后,这仅比较指向不同字符串的指针,即存储它们的地址,而不是它们的内容。对于两个不同的数组,这保证是不同的,即带有!=的表达式将始终为真。

string0[i] != string1[i]

为了比较两个以 0 结尾的字符序列(因为 argv 保证如此(,请使用

0==strcmp(string0, string1)

最新更新