c - 解析 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()
功能在遇到空格时会停止。
是否有将每个部分存储到变量中的有效方法?
解决方案
如您所述,%s
使用空格作为分隔符。要|
用作分隔符,请使用%[^|]
. 这匹配任何不包括 的字符序列|
。
并且由于num
是未签名的,因此您应该使用%u
,而不是%d
。
sscanf(data, "%u|%[^|]|%[^|]", &num, str1, str2);
不要忘记为str1
和str2
指向分配内存;scanf()
不会自动这样做。
您的变量声明也是错误的。它需要是:
char *str1, *str2;
您的声明相当于:
char *str1;
char str2;
推荐阅读
- vue.js - 计算属性未触发 v-if 块
- ms-word - 尝试使用 InsertHtml 方法将 html 插入内容控件时,在 context.sync() 出现 Rich Api 错误
- python-extensions - 如何在 Python 调试环境中构建扩展?
- r - 数据中按类别的主题建模
- powershell - Powershell:添加具有从正则表达式哈希表中检索到的值的列
- angular - angular6 可重用下拉与对象绑定
- python - 使用 buildozer 编译 apk 时出错
- android - 错误状态:PLACES_API_RATE_LIMIT_EXCEEDED
- electron - Chrome 开发工具没有出现在电子中
- android - 使用 Jackson 和 Retrofit 进行异步 JSON 映射