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

C语言如何将两个字符拼接为字符串?示例代码出现段错误原因是什么

段错误原因

  • strcat函数的入参要求是两个以\0结尾的C字符串首地址(char*类型),你传入的buffer[8]、buffer[9]都是单个char类型的字符值,编译器会把字符的ASCII码直接当作内存地址去访问,触发了非法内存访问,因此出现段错误。

可行实现方案

方案1:手动拼接字符转换

如果要沿用你取数组下标的思路,直接把对应字符赋值到新数组,补字符串结束符即可:

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

int main( void )
{
    char buffer[] = "{app_id:9401}";

    printf("First number:%c%c. Second Number: %c%c\n", buffer[8], buffer[9], buffer[10], buffer[11]);

    char first_number[3] = {0}; // 初始化全0,自动带字符串结束符
    first_number[0] = buffer[8];
    first_number[1] = buffer[9];
    int x = atoi(first_number);
    printf("%d\n", x);

    // 提取第二个整数同理
    char second_number[3] = {0};
    second_number[0] = buffer[10];
    second_number[1] = buffer[11];
    int y = atoi(second_number);
    printf("%d\n", y);

    return 0;
}

方案2:用sscanf直接匹配提取

不需要手动计算下标,通过格式匹配直接读取数值,代码更简洁:

#include <stdio.h>

int main(void) {
    char buffer[] = "{app_id:9401}";
    int x, y;
    // %2d表示读取2位长度的整数
    sscanf(buffer, "{app_id:%2d%2d}", &x, &y);
    printf("第一个整数:%d,第二个整数:%d", x, y);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:36:04