自定义C字符串比较函数未被调用且返回值异常求助
问题排查与修复
嘿Max,你的代码有两个核心问题导致了当前的状况,咱们一步步来解决:
1. string_compare函数从未被调用
你在main函数里只是定义了两个字符串变量,还重复声明了函数,但完全没有调用这个函数的代码!而且main里的函数声明是多余的——你已经在全局作用域做了一次声明,不需要再在main里重复写。
要调用函数,你需要在main里添加调用语句,并且可以把返回值打印出来查看结果,比如:
int result = string_compare(v, w); printf("比较结果:%d\n", result);
2. while循环的逻辑顺序存在潜在漏洞
虽然在你的测试用例("N"和"M")里循环能返回正确值,但当前的逻辑顺序不够严谨:如果两个字符串完全相等,循环会在遇到'\0'时触发break并返回0,这部分是对的,但当其中一个字符串提前结束时,逻辑虽然能得到正确结果,但可读性较差。更清晰的写法应该是先判断是否到达字符串结尾,再判断字符是否相等,这样逻辑更直观:
修正后的循环逻辑:
int i = 0; while (v[i] == w[i]) { if (v[i] == '\0') { // 两个字符串同时到结尾,完全相等 return 0; } ++i; } // 字符不相等,返回差值 return v[i] - w[i];
完整修正后的代码
#include <stdio.h> // 需要引入stdio.h来使用printf int string_compare(char v[], char w[]); int main (void) { char v[] = "N"; char w[] = "M"; // 调用函数并获取结果 int result = string_compare(v, w); printf("字符串比较结果:%d\n", result); // 这里会输出1,因为'N'的ASCII码比'M'大1 return 0; } int string_compare(char v[], char w[]) { int i = 0; while (v[i] == w[i]) { if (v[i] == '\0') { return 0; } ++i; } return v[i] - w[i]; }
这样修改后,函数会被正常调用,你也能看到预期的返回值啦。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

