我在C中创建了一个动态的2d数组,声明为指针数组。如何删除指针数组中的最后一行和它指向的行?
如果我将使用
arr=realloc(arr , i*sizeof(int *));
且i为3(4行-1)
第4行中的列会删除还是我需要使用类似的东西?
arr[i]=realloc(arr[i] ,sizeof(char));
arr=realloc(arr , i*sizeof(int *));
如果它是正确的或我需要使用 free()的
这是我的代码,但我想删除列的最后一行,我不知道如何
int main(void) {
char **arr,str[500];
int i=0,j,min_str_pos;
long min;
arr = malloc(sizeof(int *));
arr[i] = malloc(500*sizeof(char));
do {
printf("Enter a string (or just press <ENTER> to exit): \n");
fgets ( str, 500, stdin );
if (strcmp(str, "\n")) {
strcpy(arr[i],str);
i++;
arr=realloc(arr , (i+1)*sizeof(int *));
arr[i] = malloc(500*sizeof(char));
}
} while (strcmp(str, "\n"));
答案 0 :(得分:1)
首先,我修改了你的代码,所以它至少会编译:
int main(void) {
char **arr,str[500];
int i = 0;
arr = malloc(sizeof(int *));
arr[i] = malloc(500*sizeof(char));
do {
printf("Enter a string (or just press <ENTER> to exit)");
fgets (str, 500, stdin );
if (strcmp(str, "\n")) {
strcpy(arr[i], str);
i++;
arr=realloc(arr , (i+1)*sizeof(int *));
arr[i] = malloc(500*sizeof(char));
}
} while (strcmp(str, "\n"));
}
请注意,arr[i]=str;
不是复制字符串的正确方法。而是使用strcpy(arr[i], str);
。
要删除数组的最后一行,只需使用:
free(arr[i]);
现在删除数组的最后一列,是否要删除数组中每个char
的最后一个string
?