c++ - 为什么我的代码中的 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
}
解决方案
%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);
推荐阅读
- node.js - Hyperledger Fabric 智能合约的函数类型
- python - 为什么从 C 和 Python 使用 OpenSSL API 时会得到不同的签名?
- reactjs - React - 如何在 React 应用程序中进行动态路由
- java - Java中使用原子变量的线程安全
- c# - 菜单项一直出现在左侧,而不是右侧。我怎样才能解决这个问题?
- python - 如何在另一个函数中使用一个函数并在 Python 中对其进行操作?
- java - 关于如何在 Java 中解决这个棘手问题的建议
- javascript - 检查数组中的类型是否与另一个数组中的值匹配
- ios - iOS平台admob“显示率”低
- python - 需要一些帮助来查看从网站拉取链接的脚本