You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:36:25