c++ - 为什么我的代码中的fprintf()函数无法正常工作?

标签 c++ printf

第一个fprintf()可以正常工作,但是第二个输出整个废话
enter image description here

#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
}

最佳答案

%s格式说明符期望以NULLt终止的char数组,而不是std::string。因此,fprintf的行为是不确定的。

使用:
fprintf(f, "|%-12s |%-5c |%-9d |", name.c_str(), area, ch);
因为c_str()函数返回以null结尾的数组。

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

因此,对fprintf的最终调用应为:
fprintf(f, "|%-12s |%-5d |%-9c |", name.c_str(), area, ch);

关于c++ - 为什么我的代码中的fprintf()函数无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61198130/

相关文章:

c - 在 C 中打印结构体的名称

c - 关于 LINUX 中的段错误

c - 为什么 printf() 之后的行调用 sleep() 在打印任何内容之前执行?

c++ - 'x' 和 L'x' 之间的关系并加宽 ('x' )

c++ - 如何递归删除目录?

c++ - C++ 中的数独求解器部分求解

c++ - 在 OpenGl 中混合 GL_ALWAYS 和 GL_LESS

c++ - 我的渲染图像和纹理渲染在宽度和高度上都丢失了一个像素

java - 如何在 Java 8 中使用自定义格式打印日期?

C : Dynamic spacing when printing values