什么是无效内存引用?如何修复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
相关产品推荐
相关产品推荐

