我正在用C ++编写一个仿真程序。我有几年的编程经验,但15年没有做任何事情。这是我第一次用C ++编程。该仿真包含数百行代码,并且可以正常运行。
我的主要目标是仿真结果。我现在退休了,因此尽管仍然很感兴趣,但是获得c ++专业知识并不是我的主要目标。
我想将模拟的输出结果格式化为: 控制台输出我可以阅读
我可以通过Excel或同等功能输入的CSV输出
我的计划是可以打印两种格式的例程。
从长时间检查堆栈溢出的字符串流和youtube Im仍然停留在平方一开始。 升 我有两个问题:
1:stringstream.str()无法编译
2:调用fprintf不想识别字符串
我正在使用Netrins 8.1(标准编译器),zorin linux。这是我在这两个平台上进行开发的第一次经验。我可以自己编写代码来执行此操作,但是我不能成为第一个想要执行此操作的人。如下示例代码在互联网上复制了答案和“ howto”
以下是相关的代码段:
#include <stdio.h>
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include "globals.h"
#include "bjClass.h"
using namespace std;
extern FILE * resultsFile;
void print_disk_file(int outstream )
{
std::ostringstream s1;
int i = 22;
s1 << "Hello " << i << endl;
string s2 = s1.str(); // compiler says "unable to resolve str"
cout << s2;
// ...
ostringstream os;
os << "dec: " << 15 << " hex: " << std::hex << 15 << endl;
cout << os.str() << endl;
fprintf(resultsFile, "%s %c" , s1.str(), ' ') ; // compiler says "unable to resolve str" and gives warning about strings and char *
fprintf(resultsFile, "%s %c" , s2, ' ') ;
}
答案 0 :(得分:1)
您必须使用basic_string的data()
或c_str()
方法来获取指向基础数据的指针。
https://en.cppreference.com/w/cpp/string/basic_string
即:
fprintf(resultsFile, "%s %c" , s1.str().c_str(), ' ') ;
fprintf(resultsFile, "%s %c" , s2.c_str(), ' ') ;
当然,直接操作std::string
数据并不安全。 c_str()
返回指向常量缓冲区的指针,该缓冲区可用于输出例程。
您给出的错误消息很奇怪。
“无法解析str”不是来自copiler的消息。这些来自NetBeans IDE。这是可能的解决方案netbeans unable to resolve identifier c_str。
PS。在C ++中,正确的头文件名为<cstdio>
。如果可以改用stdio.h
,则由实现定义。