繁体   English   中英

C中的字符数组比较

[英]Char array comparison in C

我有以下函数来比较C中的两个char数组:

short test(char buffer[], char word[], int length) {
    int i;
    for(i = 0; i < length; i++) {
        if(buffer[i] != word[i]) {
            return 0;
        }
    }
    return 1;
}

在主要的某个地方:

char buffer[5]; //which is filled correctly later
...
test(buffer, "WORD", 5);

它在i = 0时立即返回0.如果我将函数改为:

short test(char buffer[], int length) {
    int i;
    char word[5] = "WORD";
    for(i = 0; i < length; i++) {
        if(buffer[i] != word[i]) {
            return 0;
        }
    }
    return 1;
}

......它就像一个魅力。 在函数测试的第一个版本中,调试器说缓冲区和字数组是char *的类型。 在函数测试的第二个版本中,它表示缓冲区是char *类型,测试数组是char []类型。 函数strcmp()也不起作用。

这里究竟出了什么问题? 程序用于PIC单片机,编译器为C18,IDE为MPLAB。

嗯...

有时在嵌入式系统中存储字符串的区别。

在第一个示例中,您定义了一个仅存储在闪存代码区域中的字符串。 因此,由于存储区域的差异,比较将因索引0而失败。

第二个示例定义包含相同字符串的局部变量。 这将位于RAM中,因此比较起作用,因为它们都在RAM中。

我会测试以下内容:

char buffer[5]; //which is filled correctly later
char word[5] = "WORD";
...
test(buffer, word, 5);

很可能它会起作用,因为比较完全在RAM中完成。

是,并删除\\ 0,因为“WORD”将自动终止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM