Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-Change目录中的unixshell_C_Shell_Cd_Chdir_Getcwd - Fatal编程技术网

C-Change目录中的unixshell

C-Change目录中的unixshell,c,shell,cd,chdir,getcwd,C,Shell,Cd,Chdir,Getcwd,我是另一个使用简单Shell的CS初学者。此时,如果传递了参数,我将尝试更改当前目录,否则,将报告到当前目录 我试着在我的程序中使用chdir(),但显然不起作用。我尝试传递一个标记化的char*参数。我也试过使用argv[1],但我一定是做错了什么,因为这两种方法都不起作用 另外,我也不确定如何使参数指针(包含目录字符串)保持静态,因此当我使用putenv(此处的参数)时,没有任何问题 以下是我的代码的相关部分: else if (strncmp(command[0], "cd", 2) ==

我是另一个使用简单Shell的CS初学者。此时,如果传递了参数,我将尝试更改当前目录,否则,将报告到当前目录

我试着在我的程序中使用
chdir()
,但显然不起作用。我尝试传递一个标记化的
char*
参数。我也试过使用argv[1],但我一定是做错了什么,因为这两种方法都不起作用

另外,我也不确定如何使参数指针(包含目录字符串)保持静态,因此当我使用putenv(此处的参数)时,没有任何问题

以下是我的代码的相关部分:

else if (strncmp(command[0], "cd", 2) == 0)
    {
        char *argmnts = strtok(0, " ");

        if (arguments != NULL)
        {
            chdir(argmnts); 
            putenv(argmnts); // THE ARG STRING NEEDS TO BE A STATIC COPY
            getcwd(promptBuff, sizeof(argmnts));
        }
    }
指针argmnts从以下位置指向标记化参数部分:
char strnBuffer[1000]
,该参数已经为命令标记化:
command[0]=strtok(strnBuffer,”)

我非常感谢任何帮助/见解


谢谢。

输入行末尾可能还有一个
'\n'
。您的
strtok
只将空格识别为分隔符,因此它不会触及换行符
chdir(“dir\n”)
将失败,除非您的目录名称末尾有换行符。

sizeof(argmnts)将为4。可能不是你想要的。可能sizeof(promptBuff).chdir()需要一个路径,putenv()需要一个格式为name=value的字符串。不止一个问题chdir()、putenv()和getcwd()都返回值,告诉您它们是否成功。你完全忽视了他们。不是很好的编程实践。我使用返回值取出所有行来检查错误,我只是想专注于找出核心问题。但是我一直在使用它们,所以我知道chdir()不能正常工作。它正在返回-1:-/