我想使用两个函数填充一个字符串数组:第一个,如果我有n个字符串要分配,将分配n个内存空间;第二个将为每个读取的字符串分配内存
这是第一个函数:
char** allocate(int n)
{
char** t;
t=(char**)malloc(n*sizeof(char*));
if(!t) exit(-1);
return t;
}
这是第二个:
void fill(char*** t,int n)
{
int i;
char* help=" ";
for(i=0;i<n;i++)
{
printf("\n saisir la chaine n %d :",i+1);
scanf("%s",help);
*t[i]=(char*)malloc((strlen(help)+1)*sizeof(char));
strcpy(*t[i],help);
}
}
我没有忘记给第二个打电话main
像这样 :fill(&t,n);
问题是我在读取第一个字符串后收到错误并且程序结束。
这条线
char* help=" ";
只是定义了一个指向的指针" "
.
没有分配内存来存储要扫描的数据scanf()
.
如果要扫描的字符数达到上限,请执行以下操作:
#define SCAN_MAXIMUM (255)
#define SCAN_FMT_STRINGIFY(max) "%"#max"s"
#define SCAN_FMT(max) SCAN_FMT_STRINGIFY(max)
...
char help[SCAN_MAXIMUM + 1]; /* Add one for the road^H^H^H^H`0`-terminator. */
scanf(SCAN_FMT(SCAN_MAXIMUM), help);
这些行也不是您想要的:
*t[i]=(char*)malloc((strlen(help)+1)*sizeof(char));
strcpy(*t[i],help);
The []
运算符绑定得更紧*
运算符,所以这些行应该看起来像
(*t)[i] = malloc((strlen(help) + 1));
strcpy((*t)[i], help);
另外^2:在C中不需要转换结果malloc/calloc/realloc
,也不推荐。
Also^3: sizeof(char)
被定义为相等1
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)