簡體   English   中英

如何在 C 中使用 scanf 動態創建字符串數組

[英]How do I dynamically create an array of strings using scanf in C

所以我一直在搜索堆棧溢出一個多小時,我不明白為什么這個函數給我一個分段錯誤。 我想創建一個字符串數組,通過scanf掃描字符串,動態改變每個字符串的大小並返回字符串數組。 任何人都可以幫忙嗎? 謝謝你。

char** readScores(int* count) {
    int c = 0;
    char** arr =(char**)malloc(100 * sizeof(char*));
    char* in;
    while(scanf("%s", in) != EOF) {
        arr[c] = (char*)malloc(strlen(in)+1);
        strcpy(arr[c], in);
    }
    *count = c;
    return arr;
}
char* in;
while(scanf("%s", in) != EOF) {

這告訴計算機從標准輸入讀取到in指向的char緩沖區。

哪個不存在,因為in沒有初始化為任何東西(更不用說有效的緩沖區了)。

我不會只使用 scanf fgets。

您需要為arrarr元素引用的每一行分配內存

char** readScores(size_t *count) {
    size_t lines = 0;
    char** arr = NULL, **tmp;
    char* in = malloc(MAXLINE), *result;
    size_t len;

    if(in)
    {
        do{
            result = fgets(in, MAXLINE, stdin);           
            if(result)
            {
                len = strlen(in);
                tmp = realloc(arr, sizeof(*tmp) * (lines + 1));
                if(tmp)
                {
                    arr = tmp;
                    len = strlen(in);
                    arr[lines] = malloc(len + (len == 0));
                    if(arr[lines])
                    {
                        if(len) memcpy(arr[lines], in, len - 1);
                        arr[lines++][len] = 0;
                    }
                    else
                    {
                        // error handling     
                    }
                }
                else
                {
                    // error handling 
                }
            }
        }while(result);
        free(in);
    }
    *count = lines;
    return arr;
}

暫無
暫無

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

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