2014-01-24 115 views
0

我正在做一个系统调用来更改C++程序中的当前目录,由于某种原因,第一次调用返回PERROR IN ELSE时成功,第二次返回非法查找PERROR IN ELSE(使用相同的命令和两者调用函数将直接指向else子句)。任何想法为什么?谢谢。我感谢你们的帮助!调用perror()第一次成功,第二次返回ILLEGAL SEEK?

void changedir(cmd_t& command, int numArg) 
{ 
    char buffer[MAXCHAR]; 
    if (numArg == 1){ 
    chdir(getenv("HOME")); 
    perror("chdir"); 
    getcwd(buffer, MAXCHAR); 
    cout << buffer << endl; 

    } else { 
    chdir(command.argv[1]); 
    perror("chdir"); 
    getcwd(buffer, MAXCHAR); 
    cout << buffer << endl; 

    } 
} 
+0

我不明白。 “这两个命令都在其他语句中。”'else'中只有一个'perror'。你如何调用这个程序?你可以提交一个测试用例吗? “第一”和“第二”是什么意思? –

+0

对不起,我的不好解释。如果没有发生错误,我就知道我不应该打电话给你。 –

回答

4

如果没有发生错误,请不要拨打perror。它会给你无意义的输出。

通常,系统/库调用后errno的值是未定义的,除非该调用将其设置为特定值。这通常只发生在调用失败并且函数通过其返回值发出信号时。

在您的具体情况下,请勿拨打perror,除非chdir返回-1。如果你给它一个NULL指针

在Linux上,chdir将引发EFAULT错误,但不是在POSIX规定(chdir),所以更优质的通话chdir(同样的事情你command.argv[i]如果可以在退房前的getenv结果可能返回一个空指针)。

+0

完美。正是我所需要的。谢谢! –

+0

@LeonardLie接受答案,然后 – zoska

+0

是的,我打算去,但需要6分钟才能接受。 –

相关问题