C语言:二维动态字符串数组问题

#include <stdio.h>
#include <stdlib.h>
void main()
{
char**ch;
int m,i;
printf("Please input the number of strings:\n");
scanf("%d",&m);
ch=(char**)malloc(m*sizeof(char));
for(i=0;i<m;i++)
{
ch[i]=(char*)malloc(80*sizeof(char));
scanf("%s",ch[i]);//为什么这里换成gets(ch[i]);运行结果不一样,会少输入一个字符串
}
for(i=0;i<m;i++)
puts(ch[i]);
}
运行完内存怎么释放,总是出现问题

第一个问题:你用gets()时,在输入倒数第二个字符串结束时是不是输入了一个“回车”或“空格”确认输入的内容?此时gets()将这个“回车”或空格作为你输入的最后一个字符串赋给变量了。
第二个问题:
free()函数释放动态分配的内存空间;追问

free函数是没错,怎么free呢,这个好像不能直接释放

追答

#include
#include
//#include "malloc.h"
void main()
{ char**ch;
int m,i;
printf("Please input the number of strings:\n");
scanf("%d",&m);
ch=(char**)malloc(m*sizeof(char));
for(i=0;i<m;i++)
{ ch[i]=(char*)malloc(80*sizeof(char));
scanf("%s",ch[i]);//为什么这里换成gets(ch[i]);运行结果不一样,会少输入一个字符串
}
for(i=0;i<m;i++)
puts(ch[i]);
free(*ch);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-02
ch=(char**)malloc(m*sizeof(char *));
相似回答