簡體   English   中英

如何返回二維數組

[英]How can I return a two dimensional array

char **splitWords(){
    
    FILE *inp;
    char **arr[1000][30];
    int i = 0;
    int word_count = 0;
    char c;
    int char_count = 0;

    inp = fopen("C:\\Users\\ksmcn\\Desktop\\free.txt", "r");
    
    while ((c = fgetc(inp)) != EOF) {
        if (c == ' ' || c == '\n') {
          //  printf("\n");

            arr[word_count][char_count] = '\0'; //Terminate the string
            char_count = 0; //Reset the counter.
            word_count++;
        }
        else {
            **arr[word_count][char_count] = c; 
        //  printf("%c",arr[word_count][char_count]);

             if (char_count < 99)
                 char_count++;
             else
                 char_count = 0;
        }   
    }
    fclose(inp);
    return **arr;
}

int main(int argc, char *argv[]) {
    
    char **array[1000][30];   
    char array = splitWords();
   
    return 0;
}

我想使用 c 編程返回一個二維數組。 我的splitWords函數將單詞存儲為數組的元素,這沒有問題。 但是我無法讓我的數組在主函數中工作。 請幫忙!

char **arr[1000][30];

您要聲明指向char指針的二維指針數組? 我認為您的意思是char arr[1000][30] 如果您真的是這個意思,那么您只是在初始化指針的空間,而不是指針的實際內容。

 inp = fopen("C:\\Users\\ksmcn\\Desktop\\free.txt", "r");

如果文件無法打開,您應該添加完整性檢查。 換句話說,檢查inp是否為NULL

 arr[word_count][char_count] = '\0'; //Terminate the string

如果您將arr聲明為char[][] ,但您將其聲明為**char[][] ] ,這將起作用。 看上面。

 **arr[word_count][char_count] = c;

如果您將arr聲明為char[][] ,則需要arr[word_count][char_count] 使用您當前的聲明,這將起作用。

 if (char_count < 99)

您的數組僅足以存儲 30 個char 另外,如果word_count超過 1000,檢查在哪里? 更不用說,如果您重置char_count ,那么它將覆蓋現有值!

 return **arr;

如果我沒記錯的話,取消引用未初始化的指針是 UB。 如果您的數組被聲明為char[][] ,則需要return arr

 char **array[1000][30];

當函數返回char **時,為什么要聲明char **[][]類型的東西?

 char array = splitWords();

為什么將array重新定義為char類型? 這行不通! 更不用說(再次) splitWords()返回char ** ,而不是char

暫無
暫無

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

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