C语言:如何逐个追加char到char数组?自定义函数返回字符拼接成串
嘿,这两个问题本质上是一回事儿,都是字符串拼接的基础操作,我给你一步步讲清楚怎么搞~
问题1:逐个将char追加到char数组中
要实现这个操作,核心是找到数组里当前字符串的末尾,然后把新字符放进去,最后别忘了补字符串结束符'\0'——这可是C语言字符串的灵魂,少了它就不是合法的字符串啦。
关键步骤:
- 确保你的char数组有足够的剩余空间,不然会出现数组越界的问题(这可是C里的常见坑);
- 用
strlen()找到当前字符串的长度(也就是末尾'\0'的位置); - 把新字符放到末尾位置,然后再把下一个位置设为
'\0'。
代码示例:
#include <stdio.h> #include <string.h> int main() { char my_arr[100] = "Hi there"; // 提前分配足够大的空间 char add_char = '!'; // 获取当前字符串长度 size_t current_len = strlen(my_arr); // 检查是否还有空间(要留一个位置给'\0') if (current_len < sizeof(my_arr) - 1) { my_arr[current_len] = add_char; my_arr[current_len + 1] = '\0'; // 必须更新结束符 } else { printf("哎呀,数组空间不够啦,没法追加字符!\n"); } printf("追加后的结果:%s\n", my_arr); // 输出 Hi there! return 0; }
问题2:将自定义函数返回的所有字符拼接成字符串
这个需求其实就是循环调用你的自定义函数,把每次返回的字符逐个追加到数组里,直到函数返回“结束标记”(比如EOF、'\0',或者你和函数约定好的其他字符)。
先明确前提:
你得和自定义函数约定好终止条件——比如函数返回EOF就表示没有更多字符了,不然程序不知道什么时候停止拼接。
固定数组实现(简单场景):
如果能预估字符总数,用固定大小的数组就足够了:
#include <stdio.h> #include <string.h> // 示例自定义函数:依次返回 'H', 'e', 'l', 'l', 'o', 然后返回EOF char get_my_char() { static int index = 0; char chars[] = "Hello"; if (index < strlen(chars)) { return chars[index++]; } else { return EOF; // 结束标记 } } int main() { char result[100] = ""; // 初始化空字符串 char current_char; // 循环调用函数,直到拿到结束标记 while ((current_char = get_my_char()) != EOF) { size_t len = strlen(result); if (len < sizeof(result) - 1) { result[len] = current_char; result[len + 1] = '\0'; } else { printf("结果数组空间不够,停止拼接!\n"); break; } } printf("拼接后的字符串:%s\n", result); // 输出 Hello return 0; }
动态内存实现(不确定字符数量时):
如果没法预估要拼接的字符总数,就用动态内存分配(malloc+realloc),这样可以灵活扩容:
#include <stdio.h> #include <stdlib.h> #include <string.h> char get_my_char() { static int index = 0; char chars[] = "I love C programming"; if (index < strlen(chars)) { return chars[index++]; } else { return EOF; } } int main() { // 初始分配10个字符的空间(包括'\0') char *result = malloc(10 * sizeof(char)); if (!result) { perror("内存分配失败"); return 1; } result[0] = '\0'; // 初始化为空字符串 size_t current_size = 10; char current_char; while ((current_char = get_my_char()) != EOF) { size_t len = strlen(result); // 检查空间是否足够,不够就扩容(这里每次扩一倍) if (len >= current_size - 1) { current_size *= 2; char *temp = realloc(result, current_size * sizeof(char)); if (!temp) { perror("内存扩容失败"); free(result); // 记得释放已分配的内存 return 1; } result = temp; } // 追加字符并更新结束符 result[len] = current_char; result[len + 1] = '\0'; } printf("动态拼接结果:%s\n", result); free(result); // 用完动态内存一定要释放! return 0; }
内容的提问来源于stack exchange,提问作者P. Bolfa
相关产品推荐
相关产品推荐

