You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在未为char*分配内存时使用C语言strcpy复制字符串?

能否不分配内存就用strcpy复制字符串?

不行,strcpy的工作逻辑只是把源字符串的字节(包括结尾的\0)逐个复制到目标指针指向的内存区域,它不会自动为目标指针分配内存。

如果直接写strcpy(char *my_string, another_string);这种代码,会出现问题:

  • 要是my_string是未初始化的野指针,strcpy会往随机内存地址写入数据,大概率触发段错误,甚至破坏其他程序的内存数据,属于未定义行为。
  • 就算my_string指向了一块内存,但这块内存的大小小于源字符串的长度(加\0的总长度),会发生缓冲区溢出,同样是未定义行为。

正确的做法得先确保目标有足够的内存空间:

  • 用堆内存分配:结合malloc和strlen先分配足够的空间,再调用strcpy:
    char *my_string = malloc(strlen(another_string) + 1); // +1用来存结束符\0
    if (my_string != NULL) { // 必须检查malloc是否成功
        strcpy(my_string, another_string);
    }
    // 用完记得用free(my_string)释放内存
    
  • 用栈上的数组:提前声明长度足够的数组,直接复制:
    char my_string[256]; // 确保数组长度大于等于源字符串的总长度
    strcpy(my_string, another_string);
    
  • 用strdup(POSIX标准函数,非C标准):它会自动完成内存分配和字符串复制:
    char *my_string = strdup(another_string);
    if (my_string != NULL) {
        // 使用字符串
        free(my_string); // 用完要释放
    }
    

内容的提问来源于stack exchange,提问作者Connor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 13:37:17