我是一个菜鸟,所以不要难过。
而不是像这样的东西;
char string[NUM OF STRINGS][NUM OF LETTERS];
是否可以使用malloc动态分配数组中的字符串数,就像为char指针动态分配内存一样?像这样:
int lines;
scanf("%d", &lines);
char *string[NUM OF LETTERS]
string = malloc(sizeof(char) * lines);
我试了但是它没有用;必须有一些我做错的事。 我想到的另一个解决方案是:
int lines;
scanf("%d", &lines);
char string[lines][NUM OF LETTERS];
但我想知道是否可以使用malloc。
答案 0 :(得分:3)
您还可以对每个单词使用malloc
,例如
char **array;
int lines;
int i;
while (scanf("%d", &lines) != 1);
array = malloc(lines * sizeof(char *));
if (array != NULL)
{
for (i = 0 ; i < lines ; ++i)
{
int numberOfLetters;
while (scanf("%d", &numberOfLetters) != 1);
array[i] = malloc(numberOfLetters);
}
}
其中numberOfStrings
和lengthOfStrings[i]
是表示您希望数组包含的字符串数的整数,分别是数组中i
字符串的长度。
答案 1 :(得分:2)
您有两种方法可以实现此目的。
首先是更复杂,因为它需要为字符串指针数组分配内存,并为每个字符串分配内存。
您可以为整个阵列分配内存:
char (*array)[NUM_OF_LETTERS]; // Pointer to char's array with size NUM_OF_LETTERS
scanf("%d", &lines);
array = malloc(lines * NUM_OF_LETTERS);
. . .
array[0] = "First string\n";
array[1] = "Second string\n";
// And so on;
第二种方法的缺点是为每个字符串分配了NUM_OF_LETTERS
个字节。所以如果你有很多短字符串,第一种方法对你来说会更好。
答案 2 :(得分:1)
如果您想要连续的内存分配:
char **string = malloc(nlines * sizeof(char *));
string[0] = malloc(nlines * nletters);
for(i = 1; i < nlines; i++)
string[i] = string[0] + i * nletters;
有关更详细的说明:请阅读FAQ list · Question 6.16。
答案 3 :(得分:0)
int lines;
scanf("%d", &lines);
char (*string)[NUM OF LETTERS]
string = malloc(sizeof(*string) * lines);
答案 4 :(得分:-1)
char **ptop;
int iStud;
int i;
printf("Enter No. of Students: ");
scanf("%d",&iStud);
ptop=(char **) malloc(sizeof(char)*iStud);
flushall();
for(i=0;i<iStud;i++)
{
ptop[i]=(char *) malloc(sizeof(char)*50);
gets(ptop[i]);
}
for(i=0;i<iStud;i++)
{
puts(ptop[i]);
}
free(ptop);