如何使用main函数的参数分配2d指针数组

时间:2015-06-02 20:29:09

标签: c

编写一个以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;
}

2 个答案:

答案 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;
}