注意:我无法发布任何代码,因为它是我正在执行的任务的一部分。
现在我有类似
的东西int main(){
char buf[30];
// Code that reads input and assigns it to buf
// Adds null terminator to the end of the buf
foo(buf);
}
void foo(char * buf){
// Do something
}
然而,当我调试时,我注意到foo中buf的值有字符串但不是null终止符。我使用strcmp来比较buf和foo()方法中的另一个字符串,并且我怀疑这是我的代码中出现错误的原因。
为什么会发生这种情况? (对不起,我对C还很不错)
答案 0 :(得分:0)
我正在推测您提供的信息量,但看起来您的缓冲区在堆栈中并且它从未被清除。你很可能有一些垃圾。你应该用零来初始化你的缓冲区。这有几种方法可以做到。
buf[] = {0};
memset(buf, 0, sizeof(buf));
请记住,当您声明一个变量时,它将使用该特定时间该位置的堆栈上的任何值进行初始化。在使用它们之前,应将所有变量初始化为已定义的状态,以消除引入未定义行为的可能性。从您提供的有限数量的信息来看,这似乎是您的问题。