我已经阅读了几个地方,c_str()
和data()
(在STL和其他实现中)之间的区别c_str()
是总是空终止而data()
不是.据我在实际实现中看到的,他们要么做同样的事情,要么做data()
电话c_str()
.
我在这里错过了什么?在哪种情况下使用哪一个更正确?
我正在尝试这个DeleteFile()
功能,我在下面编写了这个程序.
#include <iostream>
#include <fstream>
#include <windows.h>
using namespace std;
int main(){
FILE * filetxt;
// creat a file
filetxt = fopen("C:\\Users\\Thomas\\Desktop\\filetxt.txt", "w");
// delete the file
if (DeleteFile("\\\\.\\C:\\Users\\Thomas\\Desktop\\filetxt.txt") != 0){
cout<<"success";
}else{
cout<<"fail";
}
cin;
}
Run Code Online (Sandbox Code Playgroud)
但该计划没有按照预期的那样发挥作用.创建的文件未删除.
输出是:
fail
Run Code Online (Sandbox Code Playgroud) 在我的基于MFC的应用程序中,此代码:
std::string stdString("MappingName");
std::cout << "as String: " << stdString << std::endl;
CString cString(stdString.c_str());
std::cout << "as CString: " << cString << std::endl;
Run Code Online (Sandbox Code Playgroud)
生成此输出:
as String: MappingName
as CString: 01DEA060
Run Code Online (Sandbox Code Playgroud)
CString
每次运行它的值都不同,但长度似乎是不变的.其他一些结果是042219B0
和042C4378
.
我已经尝试了这个线程中讨论的每个变体,结果是一样的.我还试图将Visual Studio项目中的字符集从使用Unicode字符集更改为使用多字节字符集,同样没有任何效果.
转换失败的原因是什么?
编辑:更多的测试表明,它的价值std::string
似乎没有区别:
tmp as String: The quick brown fox jumps over the lazy dog
tmp as CString: 00EAAF88
Run Code Online (Sandbox Code Playgroud)
我还将字符集设置为Not Set,这也没有帮助.