C中的字符数组比较

时间:2013-11-24 00:00:47

标签: c arrays char c18

我有以下函数比较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。

1 个答案:

答案 0 :(得分:4)

嗯...

有时在嵌入式系统中存储字符串存在差异。

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

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

我会测试以下内容:

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

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

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