gpt4 book ai didi

c++ - 使用指针的 strcat 实现

转载 作者:太空狗 更新时间:2023-10-29 23:49:58 26 4
gpt4 key购买 nike

有谁知道我这样写的时候程序崩溃了

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com