我想使用两个函数填充一个字符串数组:第一个,如果我有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);
[]
运算符比 *
运算符绑定(bind)更紧密,因此这些行应该如下所示
(*t)[i] = malloc((strlen(help) + 1));
strcpy((*t)[i], help);
另外^2:在 C 中不需要强制转换 malloc/calloc/realloc
的结果,也不推荐这样做。
另外^3:sizeof(char)
被定义为等于1
。
关于c - 为字符串数组分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20642374/