首页 > 解决方案 > 为什么我的代码中的 fprintf() 函数不能正常工作?

问题描述

第一个 fprintf() 可以正常工作,但第二个输出完全是废话 在此处输入图像描述

#include <string>

int main()
{
    FILE* f;
    fopen_s(&f, "text.txt", "w");
    std::string name = "hello";
    int area = 123;
    char ch = 'i';

    fprintf(f, "abc"); // OK

    fprintf(f, "|%-12s |%-5c |%-9d |", name.c_str(), area, ch); // not OK
}

标签: c++printf

解决方案


%s格式说明符需要一个以 null 结尾的数组,char而不是std::string。因此fprintf' 的行为是未定义的。

利用:

fprintf(f, "|%-12s |%-5c |%-9d |", name.c_str(), area, ch);

因为c_str()函数返回以 null 结尾的数组。


此外,其他类型的格式字符串似乎也不正确。要打印int, 格式说明符是%d, not %c, 为 char 指定的格式是%c, not %d

因此,最终的调用fprintf应该是:

fprintf(f, "|%-12s |%-5d |%-9c |", name.c_str(), area, ch);


推荐阅读