[英]Passing the right argument to strtok
我有這個字符串,我試圖用strtok()
分隔:
"+ 2 3\\nln 9\\ln 10"
然后我將\\n
作為分隔符傳遞
token = strtok(argv, "\\n");
while (token)
{
args[index] = token;
token = strtok(NULL, "\\n");
index++;
}
我的args
表中的第一個元素是+ 2 3
,這很好,但是,第二個元素是l
。 有誰明白為什么? 如果是這樣,我如何在我的args
表中獲得我的ln 9
?
delim參數指定一組字節,用於分隔已解析字符串中的標記。 調用者可以在解析相同字符串的連續調用中在 delim 中指定不同的字符串。
因此,在您的代碼中, "\\n"
不是完整的字符串分隔符。 您只是對strtok
說分隔符是'\'
(因為雙退格轉義)或'n'
。
您的字符串標記"+ 2 3\\nln 9\\ln 10"
將是:
"+ 2 3"
\
和\
之間的空字符串(strtok 不顯示它)\
和n
之間為空(strtok 不顯示)"l"
" 9"
\
和\
之間的空字符串(strtok 不顯示它)"l"
" 10"
為了執行您要執行的操作, strtok
不是最佳選擇。 我可能會編寫自己的解析 function
strstr()
在原始字符串中查找"\\n"
次出現我完全同意 Roberto 和 Gerhardh 的上述回答和建議。
如果您對多分隔符的 strtok 的自定義實現感到滿意,您可以使用以下工作解決方案。
char *strtokm(char *str, const char *delim)
{
static char *tok;
static char *next;
char *m;
if (delim == NULL) return NULL;
tok = (str) ? str : next;
if (tok == NULL) return NULL;
m = strstr(tok, delim);
if (m) {
next = m + strlen(delim);
*m = '\0';
} else {
next = NULL;
}
return tok;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.