2012-01-05 56 views
-1

我使用C++中的fputs在文件中写入字符串。使用带有字符串类型参数的fputs

fputs (const char*, FILE*); 

如果我用一个简单的声明一样,

fputs ("information", pFile);

一切正常和“信息”将被写入到文件中。但是,如果我写类型的变量,

std::vector<std::string>

到文件中,一些非ASCII字符都存储在文件中。我是否必须使用一种方法将std::vector<std::string>类型转换为fputs可以识别的格式?

+1

你必须使用C++程序'fputs'一个很好的理由?如果不是,你可能应该使用C++ iostream工具而不是C函数。如果您确实有充分的理由,那么将其添加到问题中可能会让您获得更好的回复。 – 2012-01-05 00:22:55

+0

我在OMNET ++模拟器中编码。我只找到访问文件的C代码。也许如果我更彻底地搜索,我可以找到用C++访问文件的头文件。 – ManiAm 2012-01-05 00:38:31

回答

0

使用

fprintf (pFile, "%s", iterVar.at(currentRun).c_str()) 

,而不是你不希望使用data()曾经因为它缺少尾随\0

(此代码是基于@ GregHewgill的回答提问者的评论,其中iterVarvector<string>类型。)

+0

感谢Aaron McDaid,但我在我的代码中尝试了c_str()和data()。他们都显示这样无法辨认的字符! 这就是 – ManiAm 2012-01-05 00:43:26

+0

这个问题可能在别的地方。你需要给我们更多的信息。也许你把不正确的数据*放到了矢量中? – 2012-01-05 00:59:40

3

正确,fputs不明白std::vector如何在内存中布局。

当您尝试将std::vector传递给fputs()时,实际上应该有编译错误。您是否尝试通过添加演员或其他东西来解决错误?的

fprintf (pFile, "%s", iterVar.at(currentRun).data()) 

+0

是的你是对的,但我用()来获取矢量的特定位置的字符串。我的意思是: std :: vector iterVar = ... fprintf(pFile,“%s”,iterVar.at(currentRun).data()); – ManiAm 2012-01-05 00:11:13

+2

粘贴无效的代码! – 2012-01-05 00:12:01

+0

'fputs()'也不知道如何编写'std :: string'值。由于您使用的是C++,因此无论如何您都应该使用iostream。这可以工作:'pFile << iterVar.at(currentRun);'(只要'pFile'是一种合适的'std :: ostream')。 – 2012-01-05 00:12:17

相关问题