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()的行为方式相同,因为如果我没有弄错的话它们都是相同的数据类型
答案 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);