将Null终结符作为参数传递给方法时,将从字符串中删除Null终结符,

时间:2016-12-08 01:39:15

标签: c string

注意:我无法发布任何代码,因为它是我正在执行的任务的一部分。

现在我有类似

的东西
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还很不错)

1 个答案:

答案 0 :(得分:0)

我正在推测您提供的信息量,但看起来您的缓冲区在堆栈中并且它从未被清除。你很可能有一些垃圾。你应该用零来初始化你的缓冲区。这有几种方法可以做到。

  1. buf[] = {0};
  2. memset(buf, 0, sizeof(buf));
  3. 请记住,当您声明一个变量时,它将使用该特定时间该位置的堆栈上的任何值进行初始化。在使用它们之前,应将所有变量初始化为已定义的状态,以消除引入未定义行为的可能性。从您提供的有限数量的信息来看,这似乎是您的问题。