30

问题在标题中,如何初始化 char*[] 并在 C++ 中为其赋值,谢谢。

4

8 回答 8

21

尽管您可能知道, char*[] 是一个指向字符的指针数组,我猜您想存储许多字符串。初始化这样的指针数组很简单:

char ** array = new char *[SIZE];

...或者如果您在堆栈上分配内存:

char * array[SIZE];

然后,您可能希望使用循环填充数组,例如:

for(unsigned int i = 0; i < SIZE; i++){
    // str is likely to be an array of characters
    array[i] = str;
}

如该答案的评论中所述,如果您使用新的(动态分配)分配数组,请记住删除您的数组:

delete[] array;
于 2010-02-10T20:30:47.230 回答
13

根据您要初始化的内容,您可以执行以下任何操作:

char mystr[] = {'h','i',0};
char * myotherstring = "my other string";
char * mythirdstring = "goodbye";

char * myarr[] = {0};
char * myarr[] = {&mystr, myotherstring};
char * myarr[10];
char * myarr[10] = {0};
char * myarr[10] = {&mystr, myotherstring, mythirdstring, 0};

等等等等

于 2010-02-10T20:30:29.213 回答
10

我注意到你必须小心的一件事...... C 和 C++ 在初始化语法上有所不同。正如上面 Mark B. 指出的那样,您可以这样初始化一个 char 指针数组:

const char* messages[] =
{
    "Beginning",
    "Working",
    "Finishing",
    "Done"
};

但是在 C++ 中。正如 kriss 指出的那样,这会向您发出有关从字符串到 char* 的不推荐转换的警告。那是因为 C++ 假设您希望将字符串用于字符串;-}。

这并不总是正确的。所以当你真的想初始化一个 char* 数组时,我发现我必须这样做:

const char* messages[] =
{
    (char*)("Beginning"),
    (char*)("Working"),
    (char*)("Finishing"),
    (char*)("Done")
};

编译器现在很高兴...

于 2013-01-23T00:07:22.950 回答
7

像这样:

char* my_c_string;
char* x[] = { "hello", "world", 0, my_c_string };
于 2010-02-10T20:31:17.867 回答
2

像那样:

char p1 = 'A';
char p2 = 'B';
char * t[] = {&p1, &p2};

std::cout << "p1=" << *t[0] << ", p2=" << *t[1] << std::endl;

但不知何故,我相信这不是真正问题的答案......

如果你想在编译时定义一个 C 字符串数组,你应该使用一个 const char * 数组来代替:

const char * t2[] = {"string1", "string2"};

std::cout << "p1=" << t2[0] << ", p2=" << t2[1] << std::endl;

如果没有 const,我的编译器会说:警告:不推荐使用从字符串常量到 'char*' 的转换</p>

于 2010-02-10T20:38:33.173 回答
2

如果您真的只想要一个 C 风格的常量字符串数组(例如索引消息):

const char* messages[] =
{
    "Beginning",
    "Working",
    "Finishing",
    "Done"
};

但是,如果您尝试维护运行时变量字符串的容器,使用 C++ 工具std::vector<std::string>将使跟踪所有内存操作变得更加容易。

std::vector<std::string> strings;
std::string my_string("Hello, world.")
strings.push_back("String1");
strings.push_back(my_string);
于 2010-02-10T20:38:49.960 回答
1

就像任何其他数组一样:

char *a, *b, *c;
char* cs[] = {a, b, c}; // initialized
cs[0] = b; // assignment
于 2010-02-10T20:30:01.587 回答
1
#include <iostream>

int main(int argc, char *argv[])
{
    char **strings = new char *[2]; // create an array of two character pointers
    strings[0] = "hello"; // set the first pointer in the array to "hello"
    strings[1] = "world"; // set the second pointer in the array to "world"

    // loop through the array and print whatever it points to out with a space
    // after it
    for (int i = 0; i < 2; ++i) {
        std::cout << strings[i] << " ";
    }

    std::cout << std::endl;

    return 0;
}
于 2010-02-10T20:38:12.817 回答