【发布时间】:2018-04-25 00:08:27
【问题描述】:
我正在尝试使用 sscanf 将字符串格式解析为 char*,但这样做时遇到了麻烦。
字符串格式:
Track ID<>Song ID<>Artist Name<>Song Title
例子:
TRMMMYQ128F932D901<SEP>SOQMMHC12AB0180CB8<SEP>Faster Pussy Cat<SEP>Silent Night
我要做的就是获取艺术家姓名和歌曲名称。这是我如何实现sscanf。
char* songName = " ";
char* artistName = " ";
但这些似乎都没有返回任何东西。
sscanf(buffer, "%*s<>%*s<>%s<>%s", artistName, songName);
sscanf(buffer, "%*[^'<>'],%*[^'<>'],%[^'<>'],%s", artistName, songName);
如果有人有任何提示或建议,那将非常有帮助。
【问题讨论】:
-
一个问题是
"%s"停止读取在空白处。 -
阅读
sscanf的手册页可能是个好主意 -
看
"%*[^'<>'],"。扫描完不是'<>'的字符后,','怎么会是下一个字符呢? -
需要为
songName和artistName分配可修改空间;无法安全地修改字符串文字。它们可能使程序崩溃;他们可能会因为共享同一个空间而造成混乱;他们绝对没有分配足够的空间。使用char songName[64]; char artistName[64];或其他东西。 -
为什么'字符串格式'列出
<>作为分隔符,而该示例似乎使用<SEP>进行相同的工作。这令人困惑。