为什么我使用strcpy()函数时得到null输出并且不为null?

时间:2016-09-06 08:53:35

标签: c function stack

我之前问过here

在此问题已经完成之前,但在使用strcpy()函数时,我仍然对null输出感到困惑。

此代码段:

void push(char* nm, char* np, char* tel) {
if(stackMhsbaru.size != 10) {
stackMhsbaru.nama[stackMhsbaru.size + 1] = nm;
stackMhsbaru.npm[stackMhsbaru.size + 1] = np;
stackMhsbaru.telp[stackMhsbaru.size + 1] = tel;
stackMhsbaru.size++;
}
}

以上代码编译正常时,没有错误,输出为:

---------------------------
nama = Febri
npm  = 067015021
telp = 08877
---------------------------

我换了:

void push(char* nm, char* np, char* tel) {
if(stackMhsbaru.size != 10) {
if(!nm)strcpy(stackMhsbaru.nama[stackMhsbaru.size + 1],nm);
if(!np)strcpy(stackMhsbaru.npm[stackMhsbaru.size + 1],np);
if(!tel)strcpy(stackMhsbaru.telp[stackMhsbaru.size + 1],tel);
stackMhsbaru.size++;
}
}

以上代码编译正常时,没有错误但输出为:

--------------------------- 
nama =
npm  =
telp =
---------------------------

为什么?没人能解释?

1 个答案:

答案 0 :(得分:1)

此:

if(!nm)

可以阅读"如果不是nm非零",即只有在nm为假时它才会为真,只有在它是&#39 ; s NULL

您不会显示您如何调用该函数,但将NULL指针作为strcpy()的第二个参数会给出未定义的行为。

你的意思是

if(nm != NULL)

请注意,这也更明确,并且(在我看来,虽然这是一个主观性的海洋)更清楚。如果您不是经验丰富的C程序员,我说使用显式比较是个好主意。