在C(Linux)中向chdir()传递变量
我的C程序中的chdir()有问题-只有在Linux上运行时(在Mac上运行良好)。我已经精简了我的代码 类似这样的方法很好:在C(Linux)中向chdir()传递变量,c,linux,chdir,C,Linux,Chdir,我的C程序中的chdir()有问题-只有在Linux上运行时(在Mac上运行良好)。我已经精简了我的代码 类似这样的方法很好: chdir("/Documents"); 但当我尝试将其作为变量传递时,它不想起作用 char *home_directory; home_directory = malloc(80); chdir(home_directory); 主目录是从代码中其他地方的文件读取的,如果需要,我可以发布我是如何做到这一点的 谢谢。试着做一些错误检查,像这样 char *home
chdir("/Documents");
但当我尝试将其作为变量传递时,它不想起作用
char *home_directory;
home_directory = malloc(80);
chdir(home_directory);
主目录是从代码中其他地方的文件读取的,如果需要,我可以发布我是如何做到这一点的
谢谢。试着做一些错误检查,像这样
char *home_directory;
home_directory = malloc(80);
/* ...fill the home directory... */
if (chdir(home_directory) == -1)
perror("chdir");
。。然后用
manchdir
yo可以查找错误代码的含义。试着做一些错误检查,像这样
char *home_directory;
home_directory = malloc(80);
/* ...fill the home directory... */
if (chdir(home_directory) == -1)
perror("chdir");
。。然后使用
man chdir
yo可以查找错误代码的含义。因为您正在从文件中读取home\u目录
,在将尾随换行符和任何其他伪字符用作chdir
的参数之前,您是否忘记删除它?因为您正在从文件中读取主目录
,在将其用作chdir
的参数之前,您是否忘记删除尾随换行符和任何其他伪字符?由于chdir
是Linux上的系统调用,您只需使用strace
程序即可查看您的程序的实际功能。这并不能使您免于预先处理代码中的错误;明显地它只是帮助您跟踪程序执行的操作。由于chdir
是Linux上的系统调用,您只需使用strace
程序即可查看程序的实际功能。这并不能使您免于预先处理代码中的错误;明显地它只是帮助你遵循你的程序所采取的行动。是“它不想工作”的最好证明,它可以向你的同行精确地表达你的技术想法?(1)张贴代码填充主页目录
。(2) Linux上到底有什么失败?我希望您读取malloc
和chdir
之间的主目录?您确定79个字符足够路径吗?您应该检查chdir()
返回的内容以及之后设置的errno
(您的程序可能应该以这种方式处理错误)peror()
将向您显示一条可读的错误消息。我假设您在调用chdir()
之前已经检查了值home\u目录
。可以肯定,作为参数传递的变量的内容是错误的。请尝试strcpy(主目录,/Documents)代码>在上面代码中的chdir之前。是否“它不想工作”是您向同行精确表达技术想法能力的最佳证明?(1)张贴代码填充主页目录
。(2) Linux上到底有什么失败?我希望您读取malloc
和chdir
之间的主目录?您确定79个字符足够路径吗?您应该检查chdir()
返回的内容以及之后设置的errno
(您的程序可能应该以这种方式处理错误)peror()
将向您显示一条可读的错误消息。我假设您在调用chdir()
之前已经检查了值home\u目录
。可以肯定,作为参数传递的变量的内容是错误的。请尝试strcpy(主目录,/Documents)代码>在上面代码中的chdir之前。我知道问题与此一样微不足道。非常感谢您的帮助,谢谢@用户1038788:那么如果这是正确的答案,为什么你不投票并将其标记为已接受?“投票需要15个声誉”。我现在已将其标记为已接受。我知道问题与此一样微不足道。非常感谢您的帮助,谢谢@用户1038788:那么如果这是正确的答案,为什么你不投票并将其标记为已接受?“投票需要15个声誉”。我现在已将其标记为已接受。errno
几乎肯定会以enoint
结束。strace
建议可能会被证明更有用(除了在不需要重建的情况下给出errno
之外;-)当然,不检查错误代码,然后再抱怨它不起作用是非常糟糕的做法。。。你很难期望人们在每次系统调用失败时都带着一个strace…几乎肯定errno
最终会变成enoint
。strace
建议可能会被证明更有用(除了在不需要重建的情况下给出errno
之外;-)当然,不检查错误代码,然后再抱怨它不起作用是非常糟糕的做法。。。你很难期望人们在每次系统调用失败时都带着strace。。。