c++ - sscanf() 无法正确识别格式

标签 c++ scanf

当我在下面的代码中使用 sscanf() 时,出于某种原因,它会将整行放在第一个字符串中,我没有发现任何问题。 Msg() 的输出类似于 PatchVersion=1.1.1.5 = °?¦§-

文件看起来像这样(除了每一行都是一个新行,不知道为什么它在 StackOverflow 上显示为一个)

PatchVersion=1.1.1.5
ProductName=tf
appID=440

代码:

bool ParseSteamFile()
{
    FileHandle_t file;
    file = filesystem->Open("steam.inf", "r", "MOD");

    if(file)
    {
        int size = filesystem->Size(file);
        char *line = new char[size + 1];

        while(!filesystem->EndOfFile(file))
        {
            char *subLine = filesystem->ReadLine(line, size, file);

            if(strstr(subLine, "PatchVersion"))
            {
                char *name = new char[32];
                char *value = new char[32];
                sscanf(subLine, "%s=%s", name, value);

                Msg("%s = %s\n", name, value);
            }
            else if(strstr(subLine, "ProductName"))
            {
                char *name = new char[32];
                char *value = new char[32];
                sscanf(subLine, "%s=%s", name, value);

                Msg("%s = %s\n", name, value);
            }
        }

        return true;
    }
    else
    {
        Msg("Failed to find the Steam Information File (steam.inf)\n");
        filesystem->Close(file);
        return false;
    }

    filesystem->Close(file);
    return false;
}

最佳答案

一个解决方案是使用(在我看来未被充分利用的)字符组格式说明符:

sscanf(subLine, "%[^=]=%s", name, value);

此外,在依赖它们之前,您应该使用 sscanf() 的返回值来验证您确实获得了这两个值。

关于c++ - sscanf() 无法正确识别格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4105992/

相关文章:

c++ - QWebSocketServer - 不释放内存

c++ - Solaris 配置文件解析器

c++ - 在 C/C++ scanf() 扫描集中指定 ']' 字符

c++ - FSCANF 阅读撇号和连字符时遇到问题?

c - 结构指针段错误

c - scanf ("%d",a) 使用 "while"语法绕过 scanf

c++ - WinRT 上的 UuidToString

c++ - 如何提取二维矩阵C++同一条对角线上的单元格索引

c++ - 是否存在与 Objective-C 实例和类方法等效的 C++?

c - 使用 scanf 解析字符串时的奇怪行为