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

字符串复制算法实现异常:源字符串前n字符丢失问题求助

问题排查与解决

异常原因分析

  1. 返回指针位置错误:函数stringCopy中,*T++ = *S++执行时T指针会持续向后移动,复制完成后T已经指向目标字符串的末尾位置。此时返回该指针给printf,printf会从这个末尾位置开始输出,而非目标字符串的起始地址,导致视觉上出现“移除前n个字符”的异常。
  2. 缺少字符串终止符:代码中注释掉了*T = 0;,复制后的目标字符串没有正确的'\0'终止符,printf输出时会越界读取内存,行为完全未定义。
  3. 不良编码习惯:char* again = "another";里的字符串字面量是只读的,应该用const char*修饰指针,避免潜在的未定义行为。

解决步骤

  1. 保存目标起始地址:在函数开头保存T的初始值,最后返回这个初始地址,确保printf能输出完整的目标字符串。
  2. 恢复终止符设置:取消*T = 0;的注释,在复制完所有字符后添加字符串终止符,保证字符串格式合法。
  3. 修正指针类型:将char* again改为const char* again,符合C语言对字符串字面量的使用规范。

修正后的代码

#include <stdio.h>
#include <stdlib.h>

char* stringCopy(char* T, const char* S){
    // 保存目标字符串的起始地址
    char* start = T;
    while(*S){
        *T++ = *S++;
    }
    // 添加字符串终止符
    *T = 0;
    // 返回起始地址
    return start;
}

int main(void){
    char sentence[100] = "some sentence";
    const char* again = "another";

    printf("%s", stringCopy(sentence, again));
    return EXIT_SUCCESS;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:30:45