我正在使用strtok,我有点困惑。
我有一个包含许多字符串的数组,我想将这些字符串标记为一个临时数组。当我执行strtok时,它将第一个令牌存储在临时数组中,但也更改了原始数组的值。所以我很困惑。
char cmdTok[10] , *cmd = cmdTok;
printf("command[0] = %s\n", commands[0]);
cmd = strtok(commands[0], " \n\0");
printf("command[0] after strtok = %s\n", commands[0]);输出为
command[0] = #Draw A Ring
command[0] after strtok = #draw如何在命令中保留原始值?
发布于 2012-01-29 01:35:50
对字符串的副本执行strtok。
char *copy = strdup(commands[0]);
cmd = strtok(copy, " \n");
/* ... */
free(copy);如果您没有/不想使用strdup
char *copy = malloc(strlen(commands[0]) + 1);
strcpy(copy, commands[0]);
/* ... */发布于 2012-01-29 01:37:02
strtok修改其输入。
这是一个糟糕的旧函数。抱歉的。
如果你想保留原来的字符串并调用strtok (而不是strstr或其他类似的替代方法),你必须在第一次调用之前将字符串复制出来。
https://stackoverflow.com/questions/9047345
复制相似问题