0

我在 C 中创建了一个动态二维数组,声明为指针数组。如何删除指针数组和它指向的行中的最后一行?

如果我会使用

    arr=realloc(arr , i*sizeof(int *));

i 是 3 (4 rows-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"));
4

1 回答 1

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吗?

于 2012-12-23T19:32:05.553 回答