我想下面的代碼,以產生像的代碼如下所示的結構。我沒有從代碼中得到它。動態3D可變列字符數組操作用C
我想要代碼創建一個3D動態數組,其中包含如下所示的數據,以便當我要打印特定的字符串(如printf("%s\n",szData[2][3]);
)時,我會得到"string4"
。另外,我想從特定位置獲取特定字符,例如putchar(szData[0][3][2]
我得到'r'
。
而是下面的代碼,儘管指定位置打印出最後保存的數據。例如printf("%s",szData[0][0]);
應該已經"string1"
它打印出"string2"
這是szData[2][1]
數據。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char***szData;
char temp[500];
int i,j,k,x,n,m,index;
printf("Rows:");
scanf("%d",&n);
szData=(char***)malloc(n*sizeof(char));
for(i=0;i<n;i++){
printf("Col: ");
scanf("%d",&m);
szData[i]=(char**)malloc(m*sizeof(char));
for(j=0;j<m;j++){
printf("string[%d][%d]=",i,j);
scanf("%s",temp);
szData[i][j]=(char*)malloc(25*sizeof(char));
szData[i][j]=temp;
}
}
printf("memmory[%d][%d]=%s\n",0,2,szData[0][2]);//Printing string from specific location
return 0;
}
Expected structure:
+----------+----------+----------+----------+
| 0 | 1 | 2 | 3 |
+----+----------+----------+----------+----------+
| 0 | string1 | string2 | string3 |string4 |
+----+----------+----------+----------+--------- +
+----------+----------+
| 0 | 1 |
+----+----------+----------+
| 0 | string1 | string2 |
+----+----------+----------+
+----------+
| 0 |
+----+----------+
| 1 | string1 |
+----+----------+
+----------+----------+----------+----------+
| 0 | 1 | 2 | 3 |
+----+----------+----------+----------+----------+
| 2 | string1 | string2 | string3 |string4 |
+----+----------+----------+----------+--------- +
+----------+----------+
| 0 | 1 |
+----+----------+----------+
| 2 | string1 | string2 |
+----+----------+----------+
+----------+----------+----------+----------+
| 0 | 1 | 2 | 3 |
+----+----------+----------+----------+----------+
| 2 | string1 | string2 | string3 |string4 |
+----+----------+----------+----------+--------- +
+----------+----------+
| 0 | 1 |
+----+----------+----------+
| 2 | string1 | string2 |
+----+----------+----------+
代碼波紋管工作正常。爲什麼不是以上?
#include <stdio,h>
#include <stdlib.h>
#include <string.h>
int main()
{
char***szData;
char temp[25];
szData= (char ***)malloc(4 * sizeof(char **)) ;
szData[0]=(char**)malloc(2*sizeof(char));
szData[0][0]=(char*)malloc(25*sizeof(char));
szData[0][0]="Henry\0";
szData[0][1]=(char*)malloc(25*sizeof(char));
szData[0][1]="Korir\0";
szData[1]=(char**)malloc(sizeof(char));
szData[1][0]=(char*)malloc(25*sizeof(char));
szData[1][0]="BSc.\0";
szData[2]=(char**)malloc(3*sizeof(char));
szData[2][0]=(char*)malloc(25*sizeof(char));
szData[2][0]="Software Engineering\0";
szData[2][1]=(char*)malloc(25*sizeof(char));
szData[2][1]="Kenyatta\0 ";
szData[2][2]=(char*)malloc(25*sizeof(char));
szData[2][2]="University\0";
szData[3]=(char**)malloc(sizeof(char));
szData[3][0]=(char*)malloc(25*sizeof(char));
szData[3][0]="From Kipsaiya, Kenya\0";
printf("szData[%d][%d]=%c size=%d\n",0,1,szData[2][0][0],sizeof(szData[0][1]));
strcpy(temp,szData[2][0]);
putchar(szData[0][0][0]);
printf("temp=%s size=%d\n",temp,sizeof(szData[2][0]));
return 0;
}
[可能的重複](http://stackoverflow.com/questions/35542391/segmentation-fault-but-unable-to-reason-how-memory-allocation-looks-fine-to-me/35542617#35542617) (免責聲明:無恥的插件)。 –
你好。感謝你的貢獻。代碼在執行過程中被壓制。我很樂意看到您提供的代碼有所改進。 – K1b1w077