#include<stdio.h>
#include<stdlib.h>
char* concatenate(char a[],char b[])
{
int length1,length2,i,j,k,l;
for(int i=0;a[i]!='\0';i++)
{
length1=i;
}
for(int j=0;b[j]!='\0';j++)
{
length2=j;
}
char *allocate=(char*)malloc((length1+length2+2)*sizeof(char));
for(k=0;k<=length1;k++)
{
allocate[k]=a[k];
}
allocate[k]=' ';
for(l=length1+2;l<=(length1+length2+2);l++)
{
allocate[l]=b[l-(length1+2)];
}
allocate[l]='\0';
return allocate;
}
int main()
{
char name1[]="Stack";
char name2[]="Overflow";
char* new=concatenate(name1,name2);
printf("%s\n",new);
free(new);
new=0;
return 0;
}
你好,我写了一个程序,借助 malloc 概念连接两个字符串。我做对了。但是我没有得到的是当我更改下面的行时
char *allocate=(char*)malloc((length1+length2+2)*sizeof(char));
到
char *allocate=(char*)malloc(sizeof(char));
输出保持不变,这怎么可能,因为我们至少需要 length1+length2+2 字节来存储它的间隙?
最佳答案
有两种可能:
要么您的运行时环境分配了比必要更多的内存,因此您的“Stack Overflow\0”字符串适合,但“Stack Overflooooooooooooow\0”不适合,或者
您正在破坏您分配的 block 之后的内存,而 C 运行时环境不会注意到,因为您的程序是微不足道的。但是,如果您的程序稍微复杂一些(例如,如果您尝试分配更多内存),就会出现错误。
关于c - 通过 malloc-heap(Concatenate string) 分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44738189/