我是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;
}
我感谢任何帮助!
答案 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()