0

ポインタ配列として宣言された動的2D配列をCで作成しました。ポインタ配列とそれが指す行の両方の最後の行を削除するにはどうすればよいですか?

私が使用する場合

    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"));
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 に答える