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

