Tag: Cstring

std :: string是如何实现的?

我很好奇知道std :: string是如何实现的,它与c string有什么不同?如果标准没有指定任何实现,那么任何解释的实现都会如何满足标准给出的string要求呢?

C中str == NULL和str =='\ 0'有什么区别?

我想知道str == NULL和str[0] == '\0'之间的区别: int convert_to_float(char *str, double *num) { if ((str == NULL) || (str[0] == '\0')) return(-1); *num = strtod(str, (char **)NULL); return(0); } 我在Linux上使用gcc。

Cstring中'\ 0'之后的内存会发生什么?

令人惊讶的简单/愚蠢/基本的问题,但我不知道:假设我想返回我的函数的用户一个Cstring,其长度我不知道在函数的开始。 我可以在一开始只放置长度的上限,并且根据处理,尺寸可能缩小。 问题是,分配足够的堆空间(上限)是否有问题,然后在处理过程中终止string? (a。) free()仍然正常工作,(b。)在'\ 0'之后的空格变得无关紧要了吗? 一旦添加了“\ 0”,内存是否返回,还是坐在那里占用空间,直到free()被调用? 为了节省一些前期编程时间,在调用malloc之前计算必要的空间,通常是不好的编程风格吗? 为了给这个上下文,我们假设我想删除连续的重复,像这样: input“Hello oOOOo !!” – >输出“Helo oOo!” …以及下面的一些代码展示了我如何预先计算我的操作所产生的大小,有效地执行两次处理来获得堆大小的权利。 char* RemoveChains(const char* str) { if (str == NULL) { return NULL; } if (strlen(str) == 0) { char* outstr = (char*)malloc(1); *outstr = '\0'; return outstr; } const char* original = str; // for reuse char prev […]

如何将CString和:: std :: string :: std :: wstring转换为对方?

CString非常方便,而std::string与STL容器更兼容。 我正在使用hash_map 。 但是, hash_map不支持CString作为键,所以我想将CString转换为std::string 。 编写一个CString哈希函数似乎花费了很多时间。 CString —–> std::string 我怎样才能做到这一点? std::string —–> CString: inline CString toCString(std::string const& str) { return CString(str.c_str()); } 我对吗? 编辑: 这里有更多的问题: 我怎样才能将wstring , CString转换为对方? //wstring -> CString, std::wstring src; CString result(src.c_str()); //CString->wstring. CString src; ::std::wstring des(src.GetString()); 有什么问题吗? 如何将std::wstring , std::string转换为对方?

Cstring与等号的比较

我有这个代码: char *name = "George" if(name == "George") printf("It's George") 我认为cstring不能与==符号进行比较,我必须使用strcmp 。 当我使用gcc(版本4.7.3)进行编译时,出现不明原因,这段代码可以工作。 我虽然这是错的,因为它就像比较指针,所以我在谷歌search,许多人说这是错误的,并与==比较不能完成。 那么为什么这种比较方法有效?

什么是std :: string :: c_str()生命周期?

在我的一个程序中,我必须与一些与const char*一起工作的遗留代码进行交互。 比方说,我有一个像这样的结构: struct Foo { const char* server; const char* name; }; 我的高级应用程序只处理std::string ,所以我想用std::string::c_str()来取回const char*指针。 但是c_str()的生命周期是多less? 我可以做这样的事情,而不面临未定义的行为? { std::string server = "my_server"; std::string name = "my_name"; Foo foo; foo.server = server.c_str(); foo.name = name.c_str(); // We use foo use_foo(foo); // Foo is about to be destroyed, before name and server } 或者我应该立即复制c_str()的结果到另一个地方? 谢谢。

为什么在写入用“char * s”初始化而不是“char s ”的string时会出现分段错误?

以下代码在第2行上收到seg故障: char *str = "string"; str[0] = 'z'; printf("%s", str); 虽然这很好地工作: char str[] = "string"; str[0] = 'z'; printf("%s", str); 经MSVC和GCCtesting。