【发布时间】:2013-12-08 18:52:05
【问题描述】:
我有以下函数来比较 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;
}
在 main 的某个地方:
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。
【问题讨论】:
-
你传入 word[] 然后使用 ukaz[] ???
-
抱歉 ukaz 来自哪里?
-
糟糕...忘记翻译了!现已更正。 @MitchWheat
-
@drive235 你说
buffer填写正确,但我对此表示怀疑。此外,在第二个示例中,您将word声明为 5 个字符的数组,然后用 6 个字符对其进行初始化。我不知道您的编译器对此做了什么,但这不是您应该如何做的。您不需要将\0添加到 C 中的文字字符串,除非该字符串需要双空终止。 -
我假设您知道它会立即返回 0,因为您将 printf() 放在那里或其他东西可以看到。为什么不看看 buffer[0] 和 word[0] 是什么?可能是您正在寻找的线索。