c++ 如何将一个char数组(或其一部分)存储到const char* 中?

f5emj3cl  于 2023-08-09  发布在  其他
关注(0)|答案(2)|浏览(101)

我是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

amrnrhlw

amrnrhlw1#

首先我想问一个问题const char* 和std::string一样吗?
const char*是一个指向C风格字符串中字符序列的指针,而std::string是一个C++类,它通过自动内存管理来管理和操作字符串。
不能使用+运算符连接char*数组。
在您的情况下,最好使用std::string,如下所示:

#include <iostream>
#include <string>

int main(){
    
    char my_array[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
    std::string group_of_letters;
    
    for(int i = 0; i <= 9; i++){
        group_of_letters += my_array[i];
    }
    
    std::cout << group_of_letters << std::endl;
    
    return 0;
}

字符串

yruzcnhs

yruzcnhs2#

std::string与常量字符串字面量有很大不同。在这种情况下,std::string在内部使用自己的allocator来分配所需的内存空间,以从其构造函数参数构造字符串。您可以通过c_str函数访问指向std::string缓冲区的C风格指针。
const char*实际上必须被解释为一个指向常量char指针,而不是一个指向char常量指针,因为你可以递增和递减指针,这表明它是一个指向不可修改的内存块的指针。当你写一些像

const char* str = "This is a test"

字符串
在内存中,有一个块,其中“This is a test”的所有字符按顺序放置在那里,实际上这个块在最终目标文件的.rodata sectionread-only section中。
您可以定义一个名为str的指针来指向这个内存块,您可以通过类似str++str--的东西来修改指针本身,但不能修改其内容。因此,像*(str) = 'k'这样的错误会给予你一个Segmentation Fault错误。
std::string是一个C++类,它封装了你创建的字符串,并提供了对许多不同类方法的访问,在这些方法中,你可以获得有关字符串的不同属性和值的信息。如上所述,您可以通过c_str访问C风格的const char*缓冲区,通过size访问字符串的大小,等等。查看here以获取更多信息。
回到你的问题,我建议考虑以下内容:

#include <iostream>
#include <string>
#include <array>

int main()
{

    std::array<char, 10> my_array = {
        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'
    };

    std::string group_of_letters;

    for (const auto& ch: my_array)
        group_of_letters += ch;

    std::cout << group_of_letters;

    return 0;
}

相关问题