【发布时间】:2016-02-28 08:41:05
【问题描述】:
我希望下面的代码生成一个类似于代码下面的结构。我没有从代码中得到它。
我希望代码创建一个 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;
}
【问题讨论】:
-
Possible duplicate(免责声明:无耻插件)。
-
你好。感谢您的贡献。代码在执行过程中崩溃。我希望看到您提供的代码有所改进。
标签: c arrays string pointers malloc