【发布时间】:2017-05-30 07:26:19
【问题描述】:
我想用这个方法在字符串前面加零:
void addFrontzeros(char *str,int zeros)
{
if(zeros==0)
{
return;
}
char *temp=malloc((strlen(str)+1+zeros)*sizeof(char));
int i=0;
for(;i<zeros;i++)
{
temp[i]='0';
}
int j=0;
for(;j<strlen(str);j++)
{
temp[j+zeros]=str[j];
}
temp[strlen(str)+zeros]=0;
str=realloc(str,(strlen(temp)+1)*sizeof(char));
strcpy(str,temp);
free(temp);
}
但是当我从另一个方法调用它时,调用后字符串为空。 调用者字符串在另一种方法中是这样分配的:
char *mul = malloc(sizeof(char)*2);
mul[0]='0';
mul[1]=0;
使用 valgrind 我得到了这个错误: 地址 0x5201b00 是大小为 2 的块内的 0 个字节已释放
我认为问题出在 realloc 上,但我不知道为什么它在这里不起作用
【问题讨论】:
-
您在离开函数后丢失了
realloc返回的指针(因为它被分配给本地指针),而且您没有在第二个循环中设置空终止符