c - 通过 malloc-heap(Concatenate string) 分配内存

标签 c pointers

#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/

相关文章:

c - C 中结构体指针的问题

C 函数指针错误

c - 函数指针错误

c - 使用 libfcgi 在 "C"中编写的 lighttpd、fastcgi 和应用程序脚本 - 奇怪的系统错误消息

c - fopen(file, "w") 是否写入新 block ?

c - 处理矩阵的边界单元格

无法将 const char* 分配给 char*

c - unsigned long int 给出整数溢出

c - 参数、多项式、C

c++ - 将成员函数指针与 0 进行比较是否总是有效的 C++?