为什么我的strcmp版本不起作用?

use*_*187 4 c++ arrays string strcmp

我有一个我自己的strcmp版本,看起来像这样

int strcmp(char str1[], char str2[])
{
    int i = 0;
    while ((str1[i] == str2[i]) && (str1[i] != '\0'))
    {
        i++;
    }

    if (str1[i] > str2[i])
        return 1;

    if (str1[i] < str2[i])
        return -1;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的测试用例是

char a[20];
char b[20];
b[0] = 'f';
a[0] = 'f';


cout << strcmp(b, a) << endl;
Run Code Online (Sandbox Code Playgroud)

但是,我输出1,意味着它们彼此不相等.如果我在函数调用中交换a和b的位置,我得-1.当我的char都是'f'时,我不确定为什么我无法在比较中得到0返回.我觉得这是如此基本,我不知道为什么我的比较是关闭的

str1[i] > str2[i] 
Run Code Online (Sandbox Code Playgroud)

tem*_*def 8

你没有初始化你的数组,只改变了每个数组的第一个元素.这意味着不是将字符串"f"和"f"相互比较,而是将两个20字节的块相互比较,除了每个块以"f"开头.(实际上,由于这些数组不是以空值终止的,所以你要将两个随机内存区域进行比较!)

尝试更改测试用例,以便strcpy用于初始化阵列.那应该可以解决你的问题.