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
相关产品推荐
相关产品推荐

