有谁知道我这样写的时候程序崩溃了
#include<stdio.h>
#include<stdlib.h>
void mystrcat(char *s,char *t) {
while(*s++);
s--;
while(*s++ = *t++);
}
int main(void) {
int size = 1024;
char *s1, *s2;
s1 = (char *)malloc(size);
//s1[0] = '\0'; ********NOTE THIS********
s2 = (char *)malloc(size);
//s2[0] = '\0'; ********NOTE THIS********
mystrcat( s1, "Hello " );
mystrcat( s2, "World" );
mystrcat( s1, s2 );
printf( "\"%s\"\n", s1 );
return 0;
}
但奇怪的是,当我不使用那两个“//”注释时,它起作用了!!!
那么为什么添加那些简单的 s2[0] = '\0';
可以使这个程序运行。
最佳答案
当您通过旧的 C malloc
函数或 C++ new
运算符分配内存时,该内存不会以任何方式初始化。读取初始化的内存会导致未定义的行为,而未定义的行为(或 UB,因为它通常被缩短)是崩溃的主要原因之一。
关于c++ - 使用指针的 strcat 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34988090/