关于std::string

主要注意的一个问题是:std::string 实际是类似一个 vector<char>的结构。 它里面是可以存放 ascii为0 的字符
不算结尾 (否则 unicode方式的编码存放就有问题) 实际长度 用 length()获取

至于string赋值和构造有好几种方式,可以看文档。
举例说明:
char c[10]="wer|\t";
c[4] = 0;
std::string s =c;
由于c是char* 长度只能用strlen获取, strlen遇到0 就结束了,所以就丢失数据了。

构造和赋值,要把长度传进去:
std::string s(c,6); //构造
s.assign(c,6); //赋值, 这个是包括结尾符0的;;;不足就补0;
s.assign(c,5); //这个不包括结尾 0 , 比如protobuf 序列化出来的串,不用多加一个0。

时间: 2024-10-29 17:41:33

关于std::string的相关文章

C2440: “delete”: 无法从“std::string”转换为“void*”

问题描述 C2440: "delete": 无法从"std::string"转换为"void*" #include ""stdafx.h""#include #include using namespace std;class A{public: virtual ~A() { cout << ""call A::~A()"" << endl;

std::string的Copy-on-Write:不如想象中美好

Copy-on-write(以下简称COW)是一种很重要的优化手段.它的核心思想是懒惰处理多个实体的资源请求,在多个实体之间共享某些资源,直到有实体需要对资源进行修改时,才真正为该实体分配私有的资源. COW技术的一个经典应用在于Linux内核在进程fork时对进程地址空间的处理.由于fork产生的子进程需要一份和父进程内容相同但完全独立的地址空间,一种做法是将父进程的地址空间完全复制一份,另一种做法是将父进程地址空间中的页面标记为"共享的"(引用计数+1),使子进程与父进程共享地址空

unsigned char [] 与 std::string 相互转换问题!C++

问题描述 unsigned char [] 与 std::string 相互转换问题!C++ 求这两个类型的相互转换的代码,同时还想问下怎样将大文件转换为 unsigned char [] 类型.(验证文件时过大读不进内存) 解决方案 http://zhidao.baidu.com/link?url=qx3_qtTjI-XcmUo_kyCRI3HhUmD0OZFg0DuGzMuUV57H3P8YRDder_KdQ43GOZ6V9knWDDWpFsWWrS67eGg0cbK83FvszP5JEpP

c++的问题- error C2440: “默认参数”: 无法从“const char [7]”转换为“std::string &amp;amp;amp;”

问题描述 error C2440: "默认参数": 无法从"const char [7]"转换为"std::string &" 代码如下: 1 #include 2 using namespace std; 3 class Student{ 4 string name; 5 public: 6 Student(string& n ="noName") :name(n){} 7 }; 8 class Teache

c++-boost::thread_specific_ptr&amp;amp;lt;std::string&amp;amp;gt; m_name 编译时无法解析的外部符号

问题描述 boost::thread_specific_ptr<std::string> m_name 编译时无法解析的外部符号 最近项目上需要做软件日志输出,头文件中声明了 class Logger { private: Logger(); ~Logger(); private: boost::thread_specific_ptr std::string m_name: boost::thread_specific_ptr m_logger: } 但是在编译时报错,无法解析的外部符号. 为

c++-哪位大神知道这个接口有什么不好吗? bool IsXP(std::string a);

问题描述 哪位大神知道这个接口有什么不好吗? bool IsXP(std::string a); 面试中遇到的问题,面试官也没给解答.求大神知道,这个接口有什么不好: bool IsXP(std::string a); 我觉得是这样: bool IsXP(const std::string &a); 解决方案 对,字符要引用,而且一般还要加const增强健壮性 解决方案二: 你的解答可以啊.引用,常量参数都是更好的方式

利用C++实现从std::string类型到bool型的转换_C 语言

利用输入字符串流:std::istringstream 复制代码 代码如下: bool b;std::string s = "true";std::istringstream(s) >> std::boolalpha >> b; 但当字符串s为"1"时,上面的代码无法正确转换,此时应该用: 复制代码 代码如下: bool b;std::string s = "1";istringstream(s) >> b;

C++: std::string 与 Unicode 如何结合?

关键字:std::string Unicode 转自:http://www.vckbase.com/document/viewdoc/?id=1293   一旦知道 TCHAR 和_T 是如何工作的,那么这个问题很简单.基本思想是 TCHAR 要么是char,要么是 wchar_t,这取决于_UNICODE 的值:     1: // abridged from tchar.h 2:  3: #ifdef _UNICODE 4:  5: typedef wchar_t TCHAR; 6:  7:

c#调用dll,c++的std::string参数怎么处理,谢谢

问题描述 //c++中的dll函数,参数为std::string,函数的目的是将值赋给nameextern"C"_declspec(dllexport)voidGetInfo(std::string&strName,std::stringstrDevice);那么c#调用它,参数怎么写呢,谢谢,std::string在c#中没有对应的类型,如果用System.String程序会崩溃 解决方案 解决方案二:原来想这种传出的,要用stringBuilder,用string不行,如果