如何在不首先定义char *的情况下初始化char *

时间:2013-11-19 05:27:45

标签: c++ dynamic char strcpy

马上,我需要为我的作业使用动态分配的字符数组,所以不建议我只使用字符串。我需要创建一个接受字符数组作为参数的方法,并使用strcpy将该字符插入到char *中。如何在不首先初始化char *的情况下执行此操作?

到目前为止,这是我的代码:

char* char_array;
char test_array[] = {'t','e','s','t','\0'};
strcpy(char_array, test_array);

4 个答案:

答案 0 :(得分:4)

你的char_array只是一个整体指针。您需要为它动态分配内存,然后执行strcpy。

char* char_array = new char[6];
char test_array[] = {'t','e','s','t','\0'};
strcpy(char_array, test_array);

或者按照Joachim的建议,您可以使用strdup()复制字符串 - 它将分配内存并将字符串复制到其中。

在这两种情况下,一旦完成后,不要忘记释放()(或删除[])生成的内存

答案 1 :(得分:0)

除非你实际为char_arraymallocnew分配了一块内存,否则你不能这样做。

int length = 6;
char* char_array = (char*) malloc(sizeof(char) * length);

char* char_array = new char[6];

答案 2 :(得分:0)

char * char_array = NULL;
void yourFunc(char your_array[]) {
    if (NULL != char_array) {
        free(char_array);
        char_array = NULL;
    }
    char_array = (char *)malloc(sizeof(char) * strlen(your_array));
    strcpy(char_array, your_array);
}

答案 3 :(得分:0)

你声明你需要一个接受char [] / char *
的方法/函数 你说过你的约束......
这似乎是教学目的的低水平 我假设空终止字符数组和有效源字符数组

//function accepts character array
char * charseqduplicate(char * s)
{
    //low level c
    const int len = strlen(s) + 1;;
    char * copy = new char[len];
    strcpy(copy, s);
    //remember to delete or use something like unique_ptr
    return copy;

}

void letsdothis()
{
    //low level c
    char test[] = {'y','e','s',char(0)};
    char * dup = charseqduplicate(test);
    cout << dup;
    delete [] dup;

}