4

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

4

1 回答 1

4

唔...

有时在嵌入式系统中,字符串的存储位置有所不同。

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

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

我会测试以下内容:

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

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

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

于 2013-11-24T00:27:22.783 回答