簡體   English   中英

解析 C 字符串並將部分字符串存儲在變量中

[英]Parsing a C string and storing parts of the string in variables

這篇文章可能被標記為重復,但我確實在網上搜索了這個特定案例,但我找不到任何類似的例子。 以下是我的代碼的簡化版本。

我將以下數據行存儲在名為test.txt的文本文件中:

12345|This is a sentence|More words here
24792|This is another sentence|More words here again

test.txt文件中的文本將始終遵循<int>|<string>|<string>的格式

我現在想存儲由分隔符|分隔的每個部分在一個變量中。

以下是我的嘗試:

uint32_t num;
char* str1, str2;

// the data variable is a char pointer to a single line retrieved from test.txt
sscanf(data, "%d|%s|%s", &num, str1, str2);

上面的代碼將檢索num的正確值,但會將第二節中的第一個單詞插入str1 ,將變量str2保留為 null。 據我了解,之所以如此,是因為sscanf() function 在遇到空格時會停止。

是否有將每個部分存儲到變量中的有效方法?

如您所述, %s使用空格作為分隔符。 使用| 作為分隔符,使用%[^|] 這匹配任何不包括|的字符序列 .

而且由於num是無符號的,你應該使用%u ,而不是%d

sscanf(data, "%u|%[^|]|%[^|]", &num, str1, str2);

不要忘記為str1str2分配memory指向; scanf()不會自動執行此操作。

您的變量聲明也是錯誤的。 它需要是:

char *str1, *str2;

您的聲明相當於:

char *str1;
char str2;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM