我不是最好的指針,所以也許你可以看到我做錯了什麼。小strtok()樂趣
比方說,我有一個像這樣的初始化數組:
char *arrayOfCommands[]={"ls -l", "wc -l"};
我的目標是獲得一個數組稱爲的char * currentCommand了這陣,着眼於arrayOfCommands的和特定細胞的將命令分隔爲空格。
我的最終目標將是對每個循環新currentCommand陣列,每個看起來像這樣:
First Loop:
currentCommand = [ls][-l]
First Loop:
currentCommand = [wc][-l]
這裏是我的代碼至今:
for (i = 0; i < 2; ++i) {
char str[] = arrayOfCommands[i];
char * currentCommand;
printf ("Splitting string \"%s\" into tokens:\n",str);
currentCommand = strtok (str, " ");
while (currentCommand != NULL){
printf ("%s\n",currentCommand);
currentCommand = strtok (NULL, " ");
}
.
.
.
//Use the currentCommand array (and be done with it)
//Return to top
}
任何幫助將非常感謝! :)
UPDATE:
for (i = 0; i < commands; ++i) {
char str[2];
strncpy(str, arrayOfCommands[i], 2);
char *currentCommand[10];
printf ("Splitting string \"%s\" into tokens:\n",str);
currentCommand = strtok (str, DELIM);
while (currentCommand != NULL){
printf ("%s\n",currentCommand);
currentCommand = strtok (NULL, DELIM);
}
}
我收到此錯誤:在分配**不兼容的類型**
它講的是 「海峽」 我傳遞的strtok功能。
你確定'strtok()'是最好的選擇嗎?你有沒有考慮過使用'strcspn()'或'strpbrk()'或類似的東西? 'strtok()'是一個危險的函數。如果你在庫函數中使用它,你必須證明你這麼做是因爲使用它會給任何在使用'strtok()'時調用你的函數的人造成嚴重破壞。而且你還必須小心,不要因爲同樣的原因調用任何使用'strtok()'的函數。一般來說,除非有一位老師將你的雙手握在火焰中並強迫你將它們留在那裏,否則請避開'strtok()'尋找'strtok_r()'。 –
什麼'char str [] = arrayOfCommands [i];'是什麼意思? –
你似乎在幾個地方混合了字符串,char數組和指針數組。也許作爲第一步,您可以編寫一些只需要一個命令字符串並將其解析爲一個令牌數組的東西。做一個函數,現在你可以調用'arrayOfCommands []'中的每個項目。第二個想法是,第一步是在嘗試構建一組令牌之前,在單獨的行上打印每個令牌。 –