为什么这段代码没有显示“reached out of memory”错误?

qnzebej0  于 2023-03-01  发布在  其他
关注(0)|答案(1)|浏览(93)

我试图在比较函数中从数组内存中取出数据。令我惊讶的是,它成功了......而我认为应该是内存错误。有人能看一下并给予我一个答案吗?

#include <stdio.h>
int string_compare(const char* w1, const char* w2, unsigned int len){
    for(int i = 0; i < len; i++){
        if(w1[i] != w2[i]){
            return 0;
        }
    }
    return 1;
}
int main(){
    printf("%d\n",string_compare("Hello'\0' world!", "Hello",10));
}
2vuwiymt

2vuwiymt1#

它工作,而我认为应该有一个内存错误。
没有内存错误。
比较在索引处停止,因为w1[5] != w2[5]为true。w1[5]',而不是 * 空字符 *。
也许OP想比较"Hello\0 world!", "Hello"
现在index 6会有麻烦,它超出了"Hello",会导致未定义的行为。“它工作”,可能发生,可能失败,这是UB。
当检测到字符差异或 * 空字符 * 时,正确的字符串比较将停止。

// if(w1[i] != w2[i]){
if(w1[i] != w2[i] || w1[i] == 0){

相关问题