c,一起使用strtok和strcat

时间:2017-03-05 21:57:40

标签: c string pointers strtok strcat

我正在使用c创建自己的shell,但我一直收到错误,我认为这涉及使用strtokstrcat。请注意,pathuserInput是全局字符串。

int myFunction()
{
    char *possiblePaths = getenv(PATH);

    path = strtok(possiblePaths,":");
    path = strcat(path,"/");
    path = strcat(path, userInput);

    while(path != NULL)
    {
        //other code

        path = strtok(NULL,":");
        path = strcat(path,"/");
        path = strcat(path, userInput);
    }
    return 1;
}

getenv给了我一个字符串,

/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/texbin

我想要做的是基于':'对字符串进行标记,然后连接'/'加上我的全局变量userInput。输出应该看起来像,

/opt/local/bin/userInput

然后下一次循环我会得到

/opt/local/sbin/userInput

不幸的是我得到以下

/opt/local/bin/userInput
userInput/userInput
/userInput/userInput
/userInput/userInput

我的第一个strtokstrcat给了我正确的结果。但是/userInput将继续循环,直到我遇到分段错误。我很确定我的错误与使用strtokstrcat混合指针有关,但我无法弄清楚如何修复它。

1 个答案:

答案 0 :(得分:1)

根据C标准(7.22.4.6 getenv函数)

  
      
  1. ...程序
  2. 指向的字符串不得修改   

标准C函数strtok将传递给函数的原始字符串更改为参数。

您可以使用标准C函数strchr来查找字符':',然后使用另一个标准函数memcpy将找到的字符串复制到字符数组中,然后使用必需的字符串附加它