[英]Problems in three dimension array in C
我像這樣定義了三維數組,但它無法讀取其中的任何字符串? 問題出在哪里? 謝謝!
int stuTotal, courseTotal,i,k;//a dynamic array
printf("Input the total number of students that you would like to import:");
scanf("%d", &stuTotal);
printf("Input the total number of courses that you would like to import:");
scanf("%d", &courseTotal);
char ***data = (char***)calloc(stuTotal,sizeof(char));//data
for(i = 0;i < stuTotal;i++){
data[i] = (char**)calloc(courseTotal,sizeof(char));
for (k = 0;k < courseTotal;k++){
data[i][k] = (char*)calloc(20,sizeof(char));
}
}
strcpy(data[0][0],"hello");
data[0][0] 顯示為空。
當您分配外部 arrays 時,您的 arguments 到sizeof
不正確 - 而不是
char ***data = (char***)calloc(stuTotal,sizeof(char));
它需要是
char ***data = (char***)calloc(stuTotal,sizeof(char **)); // you're allocating N elements of type `char **`.
您可以大大簡化該調用,如下所示:
char ***data = calloc( stuTotal, sizeof *data ); // sizeof *data == sizeof (char **)
同樣地
data[i] = calloc( courseTotal, sizeof *data[i] ); // sizeof *data[i] == sizeof (char *)
您不需要轉換malloc
和calloc
的結果,除非您在 C++ 中工作(在這種情況下,您應該使用new
或更好的某種容器類型)或古老的 Z0D61F8370CAD1D412F80B84D14 實現(pre-19)。
您應該對 3d“數據”數組使用 sizeof(char**),因為此 3d 數組的每個元素都是 char**。
int stuTotal, courseTotal,i,k;//a dynamic array
printf("Input the total number of students that you would like to import:");
scanf("%d", &stuTotal);
printf("Input the total number of courses that you would like to import:");
scanf("%d", &courseTotal);
char ***data = (char***)calloc(stuTotal,sizeof(char**));//data
for(i = 0;i < stuTotal;i++){
data[i] = (char**)calloc(courseTotal,sizeof(char*));
for (k = 0;k < courseTotal;k++){
data[i][k] = (char*)calloc(20,sizeof(char));
}
}
strcpy(data[0][0],"hello");
您指定的已分配對象的大小無效。
你必須寫
char ***data = (char***)calloc(stuTotal,sizeof(char **));//data
^^^^^^^
for(i = 0;i < stuTotal;i++){
data[i] = (char**)calloc(courseTotal,sizeof(char *));
^^^^^^
for (k = 0;k < courseTotal;k++){
data[i][k] = (char*)calloc(20,sizeof(char));
}
}
如果您的編譯器支持可變長度數組,那么您可以通過調用malloc
或calloc
一次來分配所需的數組。 例如
char ( *data )[courseTotal][20] =
malloc( sizeof( char[stuTotal][courseTotal][20] ) );
或者
char ( *data )[courseTotal][courceName] =
calloc( 1, sizeof( char[stuTotal][courseTotal][courceName] ) );
這是一個演示程序。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
size_t stuTotal = 5, courseTotal = 10, courceName = 20;
char ( *data )[courseTotal][courceName] =
calloc( 1, sizeof( char[stuTotal][courseTotal][courceName] ) );
strcpy(data[0][0],"hello");
puts( data[0][0] );
free( data );
return 0;
}
它的 output 是
hello
在這種情況下,要釋放所有已分配的 memory,只需調用一次free
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.