为什么这个函数没有成功确定是两个相同的任意字符串?

时间:2018-05-05 19:54:42

标签: c arrays string

我写了一个简单的函数,它应该返回用户提供的两个字符串是相同的。 也就是说,如果它们是,则应返回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("FALSE\n");
                }   
                else
                {   
                        printf("TRUE\n");
                }   
        }   
        else
        {   
                printf("I need at least two parameters!\n");
        }   
}

1 个答案:

答案 0 :(得分:3)

这仅确定指向char的指针的大小,这是char数组作为函数参数衰减的内容。

sizeof(string0)

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

strlen(string0)

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

string0[i] != string1[i]

为了比较两个0终止的char序列(保证argv为),使用

0==strcmp(string0, string1)