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

什么是无效内存引用?如何修复C语言字符串比较函数的该问题?

ASCII字典序字符串比较问题及修复

以下是我编写的用于判断哪个字符串按ASCII字典序更大的代码,例如'Fun'大于'Fan':

#include <stddef.h>

int StringCompare(const char* string1, const char* string2)
{
    while (*string1 && *string2 && *string1 == *string2) {
        string1++;
        string2++;
    }

    if (*string1 == *string2) {
        return 0; /* 字符串相等 */
    } else if (*string1 > *string2) {
        return 1; /* string1更大 */
    } else {
        return -1; /* string2更大 */
    }
}

运行后得到如下测试结果:

Running test: StringCompare("qsuxt7lpo9?:x0kYHkLIy6nvCFE923z", "_]YXe46Bqy5Wbp50I:2HupC=oAGqxz")  --  Passed
Running test: StringCompare("_]YXe46Bqy5Wbp50I:2HupC=oAGqxz", "_]YXe46Bqy5Wbp50I:2HupC=oAGqxz")  --  Passed
Running test: StringCompare("(null)", "Hello !!!???")  --  Failed: Invalid memory reference

问题

请问该错误是什么意思?我该如何修复?


修复完成

我已经修复了!

#include <assert.h>
#include <stddef.h>

int StringCompare(const char* string1, const char* string2)
{
    assert(string1 != NULL);
    assert(string2 != NULL);
    
    while (*string1 && *string2 && (*string1 == *string2)) {
        string1++;
        string2++;
    }

    if (*string1 == *string2) {
        return 0; /* 字符串相等 */
    } else if (*string1 > *string2) {
        return 1; /* string1更大 */
    } else {
        return -1; /* string2更大 */
    }
}

事实证明,assert()比手动检查效果更好


内容的提问来源于stack exchange,提问作者Omer Rudnick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:50:32