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

C语言自定义strcpy函数运行无输出问题求助

问题排查与修复

你的代码核心问题集中在main函数里的dstString声明和传参环节:

  • 错误1:字符串容器声明错误
    你写的char dstString = strlen(srcString) + 1;是把一个整数赋值给单个char变量,这根本不是能存储字符串的容器。字符串需要字符数组或者动态分配的指针,正确声明应该是:

    char dstString[strlen(srcString) + 1]; // 声明足够容纳原字符串+终止符的字符数组
    

    或者用动态内存分配(注意后续要释放内存):

    char *dstString = malloc(strlen(srcString) + 1);
    if (dstString == NULL) {
        perror("malloc failed");
        return 1;
    }
    
  • 错误2:函数传参类型不匹配
    因为dstString被声明成单个char,调用copy(dstString, srcString)时,这个char值会被隐式转换成指针,指向非法内存地址。copy函数里的写入操作会触发未定义行为,导致程序崩溃或无输出。

修复后的完整代码:

#include<stdio.h>
#include<string.h>

void copy(char *dst, char *src) {
    while(*src != '\0'){
        *dst = *src;
        src++;
        dst++;
    }
    *dst = '\0';
}

int main(){
    char srcString[] = "We promptly judged antique ivory buckles for the next prize!";
    char dstString[strlen(srcString) + 1]; // 修正为字符数组

    copy(dstString, srcString);
    printf("%s", dstString);

    return 0;
}

另外,你的copy函数可以简化成更贴近标准strcpy的实现风格:

void copy(char *dst, const char *src) { // 用const修饰src,明确不会修改源字符串
    while ((*dst++ = *src++) != '\0'); // 合并赋值、自增和循环判断,一行完成复制+终止符添加
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:15:53