我之前问过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 =
---------------------------
为什么?没人能解释?
答案 0 :(得分:1)
此:
if(!nm)
可以阅读"如果不是nm
非零",即只有在nm
为假时它才会为真,只有在它是&#39 ; s NULL
。
您不会显示您如何调用该函数,但将NULL
指针作为strcpy()
的第二个参数会给出未定义的行为。
你的意思是
if(nm != NULL)
请注意,这也更明确,并且(在我看来,虽然这是一个主观性的海洋)更清楚。如果您不是经验丰富的C程序员,我说使用显式比较是个好主意。