C++ 为什么我的代码中的fprintf()函数不';工作不正常吗?

C++ 为什么我的代码中的fprintf()函数不';工作不正常吗?,c++,printf,C++,Printf,第一个fprintf()可以正常工作,但第二个输出完全是胡说八道 #包括 int main() { 文件*f; fopen_s&f,“text.txt”,“w”); std::string name=“hello”; int面积=123; char ch='i'; fprintf(f,“abc”);//好的 fprintf(f,“|%-12s |%-5c |%-9d |”,name.c|u str(),area,ch);//不正常 } 格式说明符%s需要以空结尾的字符数组,而不是std::st

第一个fprintf()可以正常工作,但第二个输出完全是胡说八道

#包括
int main()
{
文件*f;
fopen_s&f,“text.txt”,“w”);
std::string name=“hello”;
int面积=123;
char ch='i';
fprintf(f,“abc”);//好的
fprintf(f,“|%-12s |%-5c |%-9d |”,name.c|u str(),area,ch);//不正常
}

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

使用:

fprintf(f,“|%-12s |%-5c |%-9d |”,name.c|u str(),area,ch)

函数返回以null结尾的数组


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

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


fprintf(f,“|%-12s |%-5d |%-9c |”,name.c|u str(),area,ch)

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

使用:

fprintf(f,“|%-12s |%-5c |%-9d |”,name.c|u str(),area,ch)

函数返回以null结尾的数组


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

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


fprintf(f,“|%-12s |%-5d |%-9c |”,name.c|u str(),area,ch)

除非绝对必要,否则请勿将信息作为图像共享。请参阅:,。除非绝对必要,否则请勿以图像形式共享信息。见:。
#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
}