为什么我的strcmp实现没有返回正确的值?

ord*_*ary 5 c c++

为什么这个打印在主打印时为0,但在strcmp函数内打印时为6?

  7 int main()
  8 {
  9 char* str = "test string";
 10 char* str2 = "test strong";
 11 //printf("string length = %d\n",strlen(str));
 12 
 13 int num = strcmp(str,str2);
 14 
 15 printf("num = %d\n",num);
 16 }




 29 int strcmp(char* str, char* str2)
 30 {
 31   if(*str == '\0' && *str2 == '\0')
 32     return 0;
 33   if(*str2 - *str == 0)
 34   {
 35     strcmp(str+1,str2+1);
 36   }
 37   else
 38   {
 39     int num = *str2 - *str;
 40     cout << "num = " <<num<<endl;
 41     return num;
 42     }
 43 }
Run Code Online (Sandbox Code Playgroud)

输出是:

num = 6 num = 0

为什么它显然应该返回的值是6时打印0?

Ja͢*_*͢ck 8

你忘了添加一个return声明吗?

 33 if(*str2 - *str == 0)
 34   {
 35     return strcmp(str+1,str2+1);
 36   }
Run Code Online (Sandbox Code Playgroud)

否则,代码将跳过您的if声明的其余部分并到达函数的末尾,不返回任何内容(或者0在您的情况下,但这很幸运).

只有两个字符串的第一个字符彼此不同时,您的代码才有效.或者如果两个字符串都是空的.

你的编译器应该警告你这件事; voidnon void功能返回.如果没有,你应该编译-Wall:)