我正在尝试在C中分配一个char *的数组。 我事先知道列数,但不知道行数 我想在需要的时候分配行。
我试图使用:
char *(*data)[NUMCOLS]; //declare data as pointer to array NUMCOLS of pointer to char
data = malloc(sizeof(char*));
现在,上面的行应该为data [0]分配...正确吗? 那么,我必须能够使用像
这样的行data[0][1] = strdup("test");
.
..
data[0][NUMCOLS-1] = strdup("temp");
我遇到了段错误。我无法理解这里有什么问题。 谁能请你帮忙。
答案 0 :(得分:2)
您尚未为要存储的内容分配足够的内存。在这种特殊情况下,那将是:
data=malloc(sizeof(char*)*NUMCOLS*NUMROWS);
要调整数组大小,您可以使用:
data=realloc(data,(size_t)sizeof(char*)*NUMCOLS*NEW_NUMROWS);
有关它的更多信息(重新分配)here
答案 1 :(得分:0)
我会这样做:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(){
char ***a = NULL;
a = realloc( a, 1 * sizeof(char **) ); // resizing the array to contains one raw
a[0] = malloc( 3 * sizeof(char *) ); // the new raw will contains 3 element
a[0][0] = strdup("a[0][0]");
a[0][1] = strdup("a[0][1]");
a[0][2] = strdup("a[0][2]");
a = realloc( a, 2 * sizeof(char **) ); // resizing the array to contains two raw
a[1] = malloc( 3 * sizeof(char *) ); // the new raw will contains 3 element
a[1][0] = strdup("a[1][0]");
a[1][1] = strdup("a[1][1]");
a[1][2] = strdup("a[1][2]");
for( int rows=0; rows<2; rows++ ){
for( int cols=0; cols<3; cols++ ){
printf( "a[%i][%i]: '%s'\n", rows, cols, a[rows][cols] );
}
}
}