动态分配c中动态分配的字符串数组

时间:2015-05-04 20:14:06

标签: c pointers memory-management dynamic-memory-allocation

我是C的新手,我遇到了在动态分配的数组中保存动态分配的字符串的问题。 我试着看一个简单的例子:

int*    p_array;

// call malloc to allocate that appropriate number of bytes for the array

p_array = malloc(sizeof(int) * 3);      // allocate 3 ints


// use [] notation to access array buckets
for (int i = 0; i < 3; i++) {
    p_array[i] = 1;
}

然而,当我在visual studio中调试它时,似乎我没有一个带有3个插槽的数组,在p_array中它只显示{1}。同样的问题发生在我用我正在尝试编写的实际代码中:在实际代码中,我在运行时从用户那里得到一个多项式,并且需要将多项式的每个项放入一个数组中细胞。我不知道多项式长度,所以我需要动态分配数组。在这个例子中,我写了一个常量字符串作为你的帮助多项式。我正试图进入数组的条款,但作为另一个例子,在调试中我只看到最后的数组{2x}

char[] polynom = "2x +5x^2 +8";
char* term;
char** polyTerms;
int i=0;
term = strtok(polynom, " ");
polyTerms = (char**)malloc(3* sizeof(polynom));


while (term != NULL)
{

    polyTerms[i] = (char *)calloc(strlen(term) + 1, sizeof(char));
    strcpy(polyTerms[i], term);
    term = strtok(NULL, " ");

    i += 1;
}

我感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

第一段代码:

调试器不知道您在p_array中分配了多少,因此它不会显示数组的大小而不是第一个元素。 BTW p_array不是数组,只是指向int的指针。

第二段代码:

代码对我来说是正确的,但它是:

char polynom[] = "2x +5x^2 +8";    

而不是

char[] polynom = "2x +5x^2 +8";

答案 1 :(得分:0)

在分配指针数组时,您需要确保分配足够的空间。

(char**)malloc(3* sizeof(polynom));

很可能不会分配所需的所有内存。

使用:

polyTerms = malloc(sizeof term * sizeof polynom);

此外,您可能希望在代码中使用strdup()来分配和复制到数组中。

polyTerms[i] = (char *)calloc(strlen(term) + 1, sizeof(char));
strcpy(polyTerms[i], term);

可以成为:

polyTerms[i] = _strdup(term); // VS2013 version of POSIX strdup()