在下面的代码示例中,将动态分配用于整数的内存,并将该值复制到新的内存位置。

main() {
    int* c;
    int name = 809;
    c = new int(name);
    cout<<*c;
}

但是,当我尝试对char字符串执行相同操作时,它不起作用。
为什么是这样?
int main() {
    char* p;
    char name[] = "HelloWorld";
    p = new char(name);
    cout << p;
}

最佳答案

您的第二个示例不起作用,因为char数组的工作方式不同于整数变量。虽然可以通过这种方式构造单个变量,但是这不适用于(原始)变量数组。 (正如您所观察到的。)

在C++中,您应尽量避免处理指针和原始数组。相反,您宁愿使用标准库容器将该字符串的副本复制到动态分配的内存数组中。在这种情况下,std::stringstd::vector<char>特别适合。 (应该首选哪个取决于语义,但可能是std::string。)

这是一个例子:

#include <string>
#include <vector>
#include <cstring>
#include <iostream>

int main(){
    char name[] = "Hello World";

    // copy to a std::string
    std::string s(name);
    std::cout << s << '\n';

    // copy to a std::vector<char>
    // using strlen(name)+1 instead of sizeof(name) because of array decay
    // which doesn't occur here, but might be relevant in real world code
    // for further reading: https://stackoverflow.com/q/1461432
    // note that strlen complexity is linear in the length of the string while
    // sizeof is constant (determined at compile time)
    std::vector<char> v(name, name+strlen(name)+1);
    std::cout << &v[0] << '\n';
}

输出为:
$ g++ test.cc && ./a.out
Hello World
Hello World

以供引用:
  • http://en.cppreference.com/w/cpp/string/basic_string
  • http://en.cppreference.com/w/cpp/container/vector
  • 关于c++ - 如何将字符串复制到新分配的内存中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44240777/

    10-11 22:55