删除c中动态数组的最后一行和最后一列

时间:2012-12-23 15:36:32

标签: c

我在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"));

1 个答案:

答案 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