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

C语言字符串拼接算法实现:char*指针编译错误求助

问题排查与修正

先逐个分析你代码里的核心错误:

1. 指针/数组访问错误

你写的*S[i]是错误的——S[i]本身就是数组(或指针)索引对应的char类型字符,再用*解引用相当于对一个int(char会自动提升为int)做指针操作,这就是编译报错的直接原因。同时,C语言中字符串的结束标志是空字符'\0',NULL是指针常量,用来比较字符应该用'\0'。

2. 循环逻辑错误

原算法第一步是找到T的末尾,你的第一个while错误地同时判断S和T的字符,应该只循环到T的末尾:while(T[i] != '\0')。

3. 语法与括号配对错误

第一个while语句没有闭合大括号就嵌套了第二个while,导致语法结构混乱,编译无法通过。

4. 返回值与变量声明错误

  • 函数声明返回const char*,但你写的return *T返回的是char类型,应该直接返回指针T。
  • 主函数里const result;没有声明类型,应该写成const char* result;。

5. 字符串字面量不可修改的问题

你定义的char* sentence = "some sentence";是字符串字面量,存储在只读内存区域,直接修改会导致未定义行为。必须把T声明为可修改的字符数组,比如char sentence[100] = "some sentence";,预留足够空间容纳拼接后的字符串。

6. 逻辑运算符错误

&是按位与运算符,判断逻辑与应该用&&。


修正后的完整代码

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

// 拼接S到T末尾,返回T的指针
char* stringConcat(char* T, const char* S) {
    int i = 0;
    int j = 0;

    // 找到T的末尾
    while (T[i] != '\0') {
        i++;
    }

    // 把S的字符逐个复制到T的末尾
    while (S[j] != '\0') {
        T[i] = S[j];
        i++;
        j++;
    }

    // 添加字符串结束符
    T[i] = '\0';

    // 返回拼接后的T
    return T;
}

int main(void) {
    // 用字符数组存储,预留足够空间
    char sentence[100] = "some sentence";
    const char* anotherSentence = "another sentence";
    char* result;

    result = stringConcat(sentence, anotherSentence);
    printf("拼接结果:%s\n", result);

    return EXIT_SUCCESS;
}

额外说明

  • 把S声明为const char*,明确表示函数不会修改S的内容,更符合C语言的const正确性。
  • 主函数中字符数组的大小要足够大,确保能容纳原字符串+拼接字符串+结束符,避免缓冲区溢出。

内容的提问来源于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.10 16:55:27