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

C语言strcat实现字符转换无效,如何实现指定辅音的Goggamal转换?

C语言实现R/S/T字符的Goggamal格式转换问题解决

问题根源

你用strcat没效果,大概率是这两个原因:

  1. 传递给strcat的不是以'\0'结尾的合法字符串——比如直接传单个'r'字符,strcat会把它当成字符串起始地址,后续内存是随机值,导致未定义行为,根本没法正确拼接。
  2. 目标缓冲区没有初始化为空字符串(即第一个字符是'\0'),strcat找不到拼接的起始位置,自然不会修改内容。

两种解决方法

方法一:修正strcat的使用方式

如果一定要用strcat,得先生成合法的转换字符串(带结束符),再确保目标缓冲区初始为空。示例代码如下:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

void transform_char(char c, char *dest) {
    char temp[4]; // 存转换后的字符串(最多3字符+结束符)
    char lower_c = tolower(c);
    
    if (lower_c == 'r' || lower_c == 's' || lower_c == 't') {
        sprintf(temp, "%co%c", c, c); // 生成如ror、SoS的格式
    } else {
        temp[0] = c;
        temp[1] = '\0'; // 普通字符生成单字符字符串
    }
    strcat(dest, temp);
}

int main() {
    FILE *in = fopen("input.txt", "r");
    FILE *out = fopen("output.txt", "w");
    if (!in || !out) {
        perror("文件打开失败");
        return 1;
    }

    char buffer[1024] = {0}; // 初始化缓冲区为空字符串
    int c;
    while ((c = fgetc(in)) != EOF) {
        transform_char((char)c, buffer);
        fprintf(out, "%s", buffer);
        memset(buffer, 0, sizeof(buffer)); // 清空缓冲区准备下一个字符
    }

    fclose(in);
    fclose(out);
    return 0;
}

方法二:放弃strcat,直接操作字符(更高效稳妥)

这种场景下,strcat属于“大材小用”——转换后的字符数固定(普通字符1个,目标字符3个),直接逐个写入文件即可,逻辑更简单,还能避免缓冲区溢出风险:

#include <stdio.h>
#include <ctype.h>

int main() {
    FILE *in = fopen("input.txt", "r");
    FILE *out = fopen("output.txt", "w");
    if (!in || !out) {
        perror("文件打开失败");
        return 1;
    }

    int c;
    while ((c = fgetc(in)) != EOF) {
        char lower_c = tolower((char)c);
        if (lower_c == 'r' || lower_c == 's' || lower_c == 't') {
            fputc((char)c, out);
            fputc('o', out);
            fputc((char)c, out);
        } else {
            fputc((char)c, out);
        }
    }

    fclose(in);
    fclose(out);
    return 0;
}

总结

优先选第二种方法,不用折腾字符串拼接,直接处理字符写入,不仅不会出现strcat的使用错误,代码效率和可读性都更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:42:12