341得票20回答
为什么我在向使用字符串字面量初始化的“char *s”写入时会出现分段错误,但不会在“char s []”上出现?

以下代码在第2行出现段错误:char *str = "string"; str[0] = 'z'; // could be also written as *str = 'z' printf("%s\n", str); 虽然这个方法完全可以正常工作:char str[] = "string"...

118得票7回答
std::string::c_str() 的结果的生命周期是什么?

在我的一个程序中,我必须与一些使用 const char* 的旧代码进行接口。 假设我有一个看起来像这样的结构:struct Foo { const char* server; const char* name; }; 我的高级应用程序只处理 std::string,因此我想使用 st...

91得票16回答
如何将CString和std :: string std :: wstring相互转换?

CString很方便,但std::string更兼容STL容器。我正在使用hash_map。但是hash_map不支持将CString作为键,因此我想将CString转换为std::string。编写CString哈希函数似乎需要花费很多时间。CString -----> std::st...

91得票3回答
有没有可能仅打印C字符串的特定部分,而不制作单独的子字符串?

假设我有以下内容:char* string = "Hello, how are you?"; 如何只打印该字符串的最后5个字节?如何只打印该字符串的前5个字节?是否有一种类似于printf的变体可以实现这一点?

67得票8回答
声明一个没有const的C风格字符串是不好的吗?如果是,为什么?

用C++实现这个char* cool = "cool"; 编译没有问题,但是会给我一个警告: 从字符串常量转换为 char* 是不赞成的。 我从不会有意地使用 C 风格的字符串而不是 std::string,但以防万一我被问到这个问题: 声明一个没有带有 const 修饰符的 C...

66得票11回答
在 C 语言字符串中,'\0' 后面的内存会发生什么?

这个问题看起来很简单/愚蠢/基础,但我不知道:假设我想向我的函数用户返回一个C字符串,但我不知道函数开始时它的长度。我只能在一开始就给定一个上限,并且根据处理情况,大小可能会缩小。 问题是,是否有问题在处理期间分配足够的堆空间(上限),然后在字符串远未占满分配的内存的情况下终止呢?也就是说,...

61得票6回答
在C语言中,memcmp、strcmp和strncmp有什么区别?

我使用C语言编写了一小段代码来测试C语言中的memcmp()、strncmp()和strcmp()函数。 以下是我编写的代码: #include <stdio.h> #include <stdlib.h> #include <string.h> int...

61得票4回答
使用C字符串会出现警告:"返回与本地变量关联的堆栈内存的地址"。

我不是C语言程序员,所以对C字符串不是很熟悉,但是现在我必须使用一个C库,以下是我的代码的缩短版本,以展示我的问题:char** ReadLineImpl::my_completion () { char* matches[1]; matches[0] = "add&...

54得票4回答
字符串终止 - char c=0 vs char c='\0'

当终止一个字符串时,逻辑上来说char c=0与char c='\0'等效,因为"null"(ASCII 0)字节是0,但通常人们倾向于使用'\0'。这是纯粹出于偏好还是更好的"惯例"?首选哪个? 编辑:K&R说:"字符常量'\0'表示值为零的字符,即空字符。常常使用'\0'代替0以...

49得票4回答
一个 std::string 可以包含嵌入的空值吗?

对于普通的C字符串,空字符'\0'表示数据的结束。 那么对于std::string类型的字符串,我能否包含空字符呢?