簡體   English   中英

二維字符指針分段錯誤

[英]2d char pointer segmentation fault

我正在 linux 終端中為我的 C 程序獲取參數,並試圖將它們傳遞給另一個二維數組指針,但是我遇到了分段錯誤,我嘗試將 argv 二維數組中的內容分配給字符串二維數組. 我怎樣才能成功地做到這一點而不會出錯?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]){

    char **strings = malloc((argc-1) * 100 * sizeof(char));

    int j = 1;
    while(*(argv + j) != NULL){
        for(int i = 0; i < strlen(*(argv + j)); i++){
            *(*(strings + j) + i) = *(*(argv + j) + i);
            printf("%c", *(*(strings + j) + i));
        }
        printf("\n");
        j++;
    }

    return 0;
}

看起來您正在嘗試將argv的內容復制到內存中,然后打印內容。 我希望我能為你畫一張記憶內容的圖片,因為這樣很容易看到發生了什么。 這使用了一個鋸齒狀的數組,所以只要谷歌一下就可以看到一些圖片。 簡而言之, char**是一個char*數組。 您的代碼未分配正確的內存大小。 您可以通過argc確切知道您擁有多少個元素,因此您可以分配strings 然后,對於strings每個char* ,您分配足夠的內存以適合從argv獲取的數據。 長度來自strlen ,然后將字符串復制到strings元素指向的內存中。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[]){
    char** strings = malloc((argc - 1) * sizeof(char*));

    for (int i = 0; i < argc - 1; ++i) {
        size_t len = strlen(argv[i + 1]);
        strings[i] = malloc(len + 1);
        strcpy(strings[i], argv[i + 1]);
        printf("%s\n", strings[i]);
    }

    // do what you would like with strings

    for (int i = 0; i < argc - 1; ++i)
        free(strings[i]);

    free(strings);
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM