我有以下函数比较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 :(得分:4)
嗯...
有时在嵌入式系统中存储字符串存在差异。
在第一个示例中,您定义了一个仅存储在闪存代码区域中的字符串。因此,由于存储区域差异,比较将因索引0而失败。
第二个示例定义包含相同字符串的局部变量。这将位于RAM中,因此比较起作用,因为它们都在RAM中。
我会测试以下内容:
char buffer[5]; //which is filled correctly later
char word[5] = "WORD";
...
test(buffer, word, 5);
很可能它会起作用,因为比较完全在RAM中完成。
是并删除\ 0,因为“WORD”将自动终止。