我是C++的新手,我在连接const char* 和char aray时遇到了麻烦。
首先我想问一个问题const char* 和std::string一样吗?
直接说我的问题,这是我正在尝试的:
我有一个大小为10的char数组,包含从a到j的字母:
char my_array[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', j};
字符串
我想用const char* 来存储这个数组(或其中的一部分)。但是我不能做连接,我想它会是这样的一些想法:
const char* group_of_letters = "\0";
for(int i = 0; i <= 9; i++){
group_of_letters += my_array[i];
}
型
我想使用for循环,因为我需要它在我的真实的项目中将数组的定义间隔存储到const char* 中,但我尝试过的任何方法都不起作用。
如果有帮助,我的完整代码看起来像这样:
#include <iostream>
int main(){
char my_array[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
const char* group_of_letters = "\0";
for(int i = 0; i <= 9; i++){
group_of_letters += my_array[i];
}
std::cout << group_of_letters;
return 0;
}
型
->使用Dev C++ 5.11 - 06/08/2023
2条答案
按热度按时间amrnrhlw1#
首先我想问一个问题const char* 和std::string一样吗?
const char*
是一个指向C风格字符串中字符序列的指针,而std::string
是一个C++类,它通过自动内存管理来管理和操作字符串。不能使用
+
运算符连接char*
数组。在您的情况下,最好使用
std::string
,如下所示:字符串
yruzcnhs2#
std::string
与常量字符串字面量有很大不同。在这种情况下,std::string
在内部使用自己的allocator
来分配所需的内存空间,以从其构造函数参数构造字符串。您可以通过c_str
函数访问指向std::string
缓冲区的C风格指针。const char*
实际上必须被解释为一个指向常量char的指针,而不是一个指向char的常量指针,因为你可以递增和递减指针,这表明它是一个指向不可修改的内存块的指针。当你写一些像字符串
在内存中,有一个块,其中“This is a test”的所有字符按顺序放置在那里,实际上这个块在最终目标文件的
.rodata section
或read-only section
中。您可以定义一个名为
str
的指针来指向这个内存块,您可以通过类似str++
或str--
的东西来修改指针本身,但不能修改其内容。因此,像*(str) = 'k'
这样的错误会给予你一个Segmentation Fault
错误。std::string
是一个C++类,它封装了你创建的字符串,并提供了对许多不同类方法的访问,在这些方法中,你可以获得有关字符串的不同属性和值的信息。如上所述,您可以通过c_str
访问C风格的const char*
缓冲区,通过size
访问字符串的大小,等等。查看here以获取更多信息。回到你的问题,我建议考虑以下内容:
型