C语言如何向字符串追加字符?使用strcat报错invalid initializer怎么解决?
问题解决方案
报错根因
- 直接触发编译错误的是
char tempC[2] = c;写法:C语言不支持用单个字符变量直接初始化字符数组,数组初始化需要匹配对应数据结构,同时参与strncat运算的字符串必须以\0结尾,你这里没有设置结束符也会导致运行异常。 - 代码还存在多个隐藏问题:
fp、filename、c变量未声明,其中c必须声明为int类型,因为getc返回值为int,只有int类型才能正确容纳EOF标识- 缺少文件打开失败的判断逻辑
box数组长度仅为100,未做越界防护,读取文件内容过长会触发内存越界- 读取文件后未调用
fclose关闭文件句柄,会造成资源泄漏
修正后可运行代码
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char box[100] = ""; // 替换为你实际要读取的文件路径 const char* filename = "test.txt"; FILE* fp = fopen(filename, "r"); if (fp == NULL) { perror("文件打开失败"); return 1; } int c; size_t cur_len = 0; // 最多读取99个字符,留1位存结束符 for (c = getc(fp); c != EOF && cur_len < 99; c = getc(fp)) { char tempC[2]; tempC[0] = c; tempC[1] = '\0'; strncat(box, tempC, 1); cur_len++; } fclose(fp); printf("读取结果:%s\n", box); return 0; }
优化方案(无需调用strncat)
直接操作数组下标赋值即可实现相同效果,性能更高逻辑更简洁:
// 循环部分可替换为如下代码 size_t idx = 0; for (c = getc(fp); c != EOF && idx < 99; c = getc(fp)) { box[idx++] = c; } box[idx] = '\0';
内容的提问来源于stack exchange,提问作者TheMathAI
相关产品推荐
相关产品推荐

