getenv()的值在strtok()中不起作用

时间:2018-05-11 18:00:06

标签: c char strtok

char *p = strtok (argv[1], ",")    #  Works perfectly
char *p = strtok (getenv("somestring"), ","); # does not work

在我的程序中,我采用 argv [1] 的值,其传递方式类似于“x,y”格式 。当没有给出argv [1]时,我的程序应该从中获取值 getenv(“somestring”),也会返回“x,y” 之后我用strtok解析它们。

我不知道为什么argv [1]和getenv()的行为方式相同,因为如果我没有弄错的话它们都是相同的数据类型

1 个答案:

答案 0 :(得分:5)

来自getenv手册中的说明:

  

通常实现时,getenv()返回指向环境列表中字符串的指针。来电者必须小心   修改此字符串,因为这会改变进程的环境。

strtok修改字符串时,您必须复制getenv返回的字符串,然后使用副本调用strtok

char *str, *ptr;
char *p = getenv("somestring");
str = malloc(strlen(p) + 1);
strcpy(str, p);
ptr = strtok(str, ",");

// Make sure to deallocate the memory once you are done using it.
free(str);

您也可以使用strdup

char *str, *ptr;
char *p = getenv("somestring");
str = strdup(p);
ptr = strtok(str, ",");

// Make sure to deallocate the memory once you are done using it.
free(str);