【问题标题】:Having trouble parsing using sscanf使用 sscanf 解析时遇到问题
【发布时间】: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的手册页可能是个好主意
  • "%*[^'&lt;&gt;'],"。扫描完不是'&lt;&gt;'的字符后,','怎么会是下一个字符呢?
  • 需要为songNameartistName分配可修改空间;无法安全地修改字符串文字。它们可能使程序崩溃;他们可能会因为共享同一个空间而造成混乱;他们绝对没有分配足够的空间。使用char songName[64]; char artistName[64]; 或其他东西。
  • 为什么'字符串格式'列出&lt;&gt;作为分隔符,而该示例似乎使用&lt;SEP&gt;进行相同的工作。这令人困惑。

标签: c io scanf


【解决方案1】:

我想通了,谢谢你的指点。我使用 ',' 作为分隔符而不是 ,并且我没有为歌曲名和艺术家名分配空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多