![](/img/trans.png)
[英]Function return 3 dimensional array, how can I get 1 dimensional array?
[英]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.