我想讀取由一組數字組成的字符串,後跟一個字符串,並用其他一些基本文本包裝。用sscanf讀取字符串的其餘部分
換句話說,該行的格式是這樣的:
Stuff<5,10,-5,8,"Test string here.">
天真,我想:
sscanf(str,"Stuff<%d,%d,%d,%d,\"%s\">",&i1,&i2,&i3,&i4,str2);
但是經過一番研究,我發現%s
應該停止解析時它得到一個空白字符。我找到了this question,但沒有一個答案解決了我遇到的問題:該字符串可能包含任何字符,包括換行符和正確轉義的引號。後者不是問題,如果我可以讓sscanf在我提供的預先分配的緩衝區中的第一個引號之後放置所有內容,我可以自行剝離結尾。
但我該怎麼做?我不能使用%[]
,因爲它需要一些東西來終止字符串,我唯一想終止它的就是空終止符。所以我想,「嘿,我只是使用空終止符!」但%[\0]
作出的編譯器脾氣暴躁:
warning: no closing ‘]’ for ‘%[’ format
warning: embedded ‘\0’ in format
warning: no closing ‘]’ for ‘%[’ format
warning: embedded ‘\0’ in format
使用類似%*c
不會工作,因爲我不知道到底有多少個字符需要採取。我嘗試通過strlen(str)
,因爲它會少於這個數字,但sscanf
返回4,並且沒有任何數據放入str2
,這表明也許是因爲長度太長而放棄了,並且沒有打擾。
更新:我想我可以做這樣的事情:
sscanf(str,"Stuff<%d,%d,%d,%d,\"%n",&i1,&i2,&i3,&i4,&n);
str2 = str+n;