2012-04-19 155 views
2

让我先感谢您花时间阅读本文。C++ c_str在字符串末尾添加奇怪的字符

我想读C++中的文件。目前我有一个方法允许用户在浏览器中选择一个文件,并将其作为'std :: string'返回。然后我必须打开这个文件,但是我为此使用的方法使用了const char *。所以我需要从一个转换到另一个。

如果在Windows中使用字符串读取文件时有一个简单的方法,那么让我知道它会解决我的整个问题。

当我从字符串转换为const char *时,使用str.c_str(),最后我得到了很多奇怪的字符。我研究过其他相同问题的主题,但答案似乎都非常针对这些项目,或者说只是坚持使用sting/vector。显然我会很乐意这样做,但是我没有使用字符串/矢量打开文件的方法。

任何帮助表示赞赏:)下面粘贴这种情况的代码和输出。

* SOURCE

std::string f; 

       if (LOWORD(wParam) == 1) { 

         f = openFile(); 

         char *fchar = new char[f.size()+1]; // +1 to account for \0 byte 

         //char *fchar = std::vector[1]; 

         std::strncpy(fchar, f.c_str(), f.size()); 

         file1 = fchar; 

         std::cout<<"string size: " << f.size() << std::endl; 
         std::cout<<"string: " << f << std::endl; 
         std::cout<<"fchar: " << fchar << std::endl; 
         std::cout<<"file1: " << file1 << std::endl; 
       } 

输出

string size: 33 
string: C:\Users\Joseph\Pictures\back_raw 
fchar: C:\Users\Joseph\Pictures\back_raw═²²²²½½½½½½½½¯■ 
file1: C:\Users\Joseph\Pictures\back_raw═²²²²½½½½½½½½¯■** 

回答

1

哪里文件1申报? openFile呢? (想知道它的返回类型)

你可以尝试手动把'\ 0'吗?恕我直言,你的char *在结尾处根本缺少\ 0 ...

1

请确保你在最后的地方放置了一个\0

相关问题