0
如果您的字符串如下所示 str="insert 111,name,123456789"
當您將它傳遞給strtok並嘗試打印值時,它們會反向輸出。 例如:strtok()作爲printf()中的一個參數反向打印值
char* token=strtok(str," ");
printf("%s %s %s %s\n",token,strtok(NULL,","),strtok(NULL,","),strtok(NULL,","));
output: insert 1234567 name 1111
代替:insert 111 name 123456789
這究竟是爲什麼?這怎麼解決?
參數評估順序未定義。不要在參數中使用帶副作用的代碼(如調用'strtok')。 –
由於參數評估的順序無法保證,因爲* sequence point *錯誤,您可能正在經歷* Indeterminently Sequenced *結果。 ** C11標準部分。 6.5.2.2(10)** –
如何解決?通過使用慣用的'while(token!= NULL)'循環。你的版本也很糟糕,因爲如果其中一個'strtok'的調用應該返回NULL,你不應該再次調用它。永遠不要依賴於你認爲應該是的輸入數據。 –