当没有固定长度的项目或字符时如何创建字符串数组。我是指针和 c 的新手,我无法理解此处发布的其他解决方案,因此我的解决方案发布在下面。希望它可以帮助别人。
问问题
10297 次
3 回答
2
char **twod_array = NULL;
void allocate_2darray(char ***source, int number_of_slots, int length_of_each_slot)
{
int i = 0;
source = malloc(sizeof(char *) * number_of_slots);
if(source == NULL) { perror("Memory full!"); exit(EXIT_FAILURE);}
for(i = 0; i < no_of_slots; i++){
source[i] = malloc(sizeof(char) * length_of_each_slot);
if(source[i] == NULL) { perror("Memory full!"); exit(EXIT_FAILURE);}
}
}
// 示例程序
int main(void) {
allocate_2darray(&twod_array, 10, 250); /*allocate 10 arrays of 250 characters each*/
return 0;
}
于 2012-10-28T13:20:24.813 回答
1
只需将 argv 项目栏中的数组作为第一项。
char **dirs = NULL;
int count = 0;
for(int i=1; i<argc; i++)
{
int arraySize = (count+1)*sizeof(char*);
dirs = realloc(dirs,arraySize);
if(dirs==NULL){
fprintf(stderr,"Realloc unsuccessful");
exit(EXIT_FAILURE);
}
int stringSize = strlen(argv[i])+1;
dirs[count] = malloc(stringSize);
if(dirs[count]==NULL){
fprintf(stderr,"Malloc unsuccessful");
exit(EXIT_FAILURE);
}
strcpy(dirs[count], argv[i]);
count++;
}
于 2012-10-28T13:03:59.433 回答
1
你的很接近,但你分配主数组的次数太多了。
char **dirs = NULL;
int count = 0;
dirs = malloc(sizeof(char*) * (argc - 1));
if(dirs==NULL){
fprintf(stderr,"Char* malloc unsuccessful");
exit(EXIT_FAILURE);
}
for(int i=1; i<argc; i++)
{
int stringSize = strlen(argv[i])+1;
dirs[count] = malloc(stringSize);
if(dirs[count]==NULL){
fprintf(stderr,"Char malloc unsuccessful");
exit(EXIT_FAILURE);
}
strcpy(dirs[count], argv[i]);
count++;
}
于 2012-10-28T13:08:03.793 回答