我有这段代码:
printf("GPU: %ic SYSTEM: %ic CPU: %ic HDD: %ic ",temp[0],temp[1],temp[2],temp[7]);
ofstream temp_file;
temp_file.open("D:\\localhost\\xampp\\htdocs\\monitor\\temps.json");
temp_file << fprintf("\"{\"GPU\": [%ic], \"System\": [%ic], \"CPU\": [%ic], \"HDD\": [%ic]}\"", temp[0],temp[1],temp[2],temp[7]);
temp_file.flush();
temp_file.close();
我得到错误“无法将'const char *'转换为'FILE * {aka _iobuf *}'以将参数'1'转换为'int fprintf(FILE *,const char *,...)'
temp变量是一个int,代码的第一行确实打印出格式化文本。如何将该文本推送到文件?
答案 0 :(得分:1)
使用boost::format
:
cout << boost::format("\"{\"GPU\": [%1%], \"System\": [%2%], \"CPU\": [%3%], \"HDD\": [%4%]}\"") % temp[0] % temp[1] % temp[2] % temp[3];
答案 1 :(得分:1)
您滥用fprintf()
。
fprintf()
会返回int
,并希望其第一个参数为FILE *
,per the documentation:
int fprintf(FILE *restrict stream, const char *restrict format, ...);
如果这是您想要采用的路线,您需要先使用s[n]printf()
格式化文本 - 制作C风格的字符串并将其写入C ++ ofstream
:
char buffer[ BUF_SIZE ];
snprintf( buffer, sizeof( buffer ),
"\"{\"GPU\": [%ic], \"System\": [%ic], \"CPU\": [%ic], \"HDD\": [%ic]}\"",
temp[0], temp[1], temp[2], temp[7] );
...
temp_file << buffer;
...
还有许多其他方法可以在C ++中格式化输出。
答案 2 :(得分:0)
这temp_file << fprintf("\"{\"GPU\": [%ic], \"System\": [%ic], \"CPU\": [%ic], \"HDD\": [%ic]}\"", temp[0],temp[1],temp[2],temp[7]);
错了。您无法合并ofstream
和fprintf
- 使用其中一种。
要将格式化输出写入您使用io manipulators的流,并且您不需要执行任何特殊操作来输出整数,字符串,双精度等。
答案 3 :(得分:0)
fprintf的第一个参数必须是指向标识流而不是temp [0](GPU)的FILE对象的指针。
C库函数int fprintf(FILE * stream,const char * format,...)将格式化输出发送到流。