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

