2012-01-28 92 views
4

即時通訊使用strtok並得到一點困惑。混亂使用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 

我如何保留命令的原始值?

回答

6

對字符串的副本執行strtok

char *copy = strdup(commands[0]); 
cmd = strtok(copy, " \n"); 
/* ... */ 

free(copy); 

如果你沒有/想用strdup

char *copy = malloc(strlen(commands[0]) + 1); 
strcpy(copy, commands[0]); 
/* ... */ 
+0

使用'strdup'來做到這一點 – 2012-01-28 17:37:23

+0

@EdHeal謝謝,我編輯:-) – cnicutar 2012-01-28 17:37:56

0

strtok修改它的輸入。

這是一個糟糕的舊功能。抱歉。

如果您想要保留原件並撥打strtok(而不是strstr或其他此類替代選項),則必須在首次調用之前將字符串複製出來。