首页 > 解决方案 > 解析 C 字符串并将部分字符串存储在变量中

问题描述

这篇文章可能被标记为重复,但我确实在网上搜索了这个特定案例,但我找不到任何类似的例子。以下是我的代码的简化版本。

我将以下数据行存储在名为的文本文件中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为空。据我了解,之所以如此,是因为该sscanf()功能在遇到空格时会停止。

是否有将每个部分存储到变量中的有效方法?

标签: cstring

解决方案


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

并且由于num是未签名的,因此您应该使用%u,而不是%d

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

不要忘记为str1str2指向分配内存;scanf()不会自动这样做。

您的变量声明也是错误的。它需要是:

char *str1, *str2;

您的声明相当于:

char *str1;
char str2;

推荐阅读