编写一个以2个整数作为参数的C程序。程序应该动态分配2D数组,读取数据,打印它们,最后释放数组。数组的数组维度取自主参数。 我的问题在这个代码运行和输入是正确的但输出不正确 输出的运行时错误
int main (int y,char *x[]){
int i,j,v,b;
v=atoi(x[1]);
b=atoi(x[2]);
char*m[v];
for(i=0;i<v;i++)
m[i]=(char*)malloc(b*sizeof(char));
for(i=0;i<v;i++)
for(j=0;j<b;j++)
scanf("%s",&m[i][j]);
for(i=0;i<v;i++){
for(j=0;j<b;j++)
printf("%s",m[i][j]);
}
return 0;
}
答案 0 :(得分:0)
您正在尝试读取字符变量中的字符串。那显然是错的!
替换此 -
for(i=0;i<v;i++)
for(j=0;j<b;j++)
scanf("%s",&m[i][j]);
使用 -
for(i=0;i<v;i++)
scanf("%s",&m[i]);
同样适用于printf。
如果你不清楚,请告诉我。
答案 1 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int y,char *x[]){
int i,j,v,b;
v=atoi(x[1]);
b=atoi(x[2]);
char *m[v][b];//allocate the 2d array of pointers on stack
for(i=0;i<v;i++){
for(j=0;j<b;j++){
char buff[128];
scanf("%127s", buff);
m[i][j] = malloc(strlen(buff)+1);
strcpy(m[i][j], buff);
}
}
for(i=0;i<v;i++){
for(j=0;j<b;j++){
printf("%s ", m[i][j]);
free(m[i][j]);
}
printf("\n");
}
return 0;
}