c - AOSP 中间件中的致命信号 11 (SIGSEGV)
问题描述
我正在尝试连接字符串,如下所示
typedef struct IInfo
{
char cmAddress[6];
UINT8 IpAddress[4];
UINT8 hIpAddress[4];
} IInfo;
在我的文件中:
IInfo Info;
char CableIP[50];
__android_log_print(ANDROID_LOG_DEBUG,"test","test--> %s:%d IpAddress[0] : %d,IpAddress[1] : %d,IpAddress[2] : %d,IpAddress[3] : %d\n", __FUNCTION__, __LINE__, Info.IpAddress[0], Info.IpAddress[1],Info.IpAddress[2], Info.IpAddress[3]);
strcpy(CableIP,Info.IpAddress[0]);//10
strcat(CableIP,"." );
strcat(CableIP,Info.IpAddress[1] );//1
strcat(CableIP,"." );
strcat(CableIP,Info.IpAddress[2] );//120
strcat(CableIP,"." );
strcat(CableIP,Info.IpAddress[3] );//36
printf("CableIP %s",CableIP);
打印如下: test: test--> _ExecuteFUN:298 IpAddress[0] : 10,IpAddress[1] : 1,IpAddress[2] : 120,IpAddress[3] : 36
预期输出为 10.1.120.36
但低于错误 F libc:致命信号 11(SIGSEGV),代码 1,tid 2888 中的故障地址 0xa(n0000001)
一个单独的数组元素打印获取正确的数据,但如果我进行连接会出错。
你能告诉我,我在哪里做错了吗?
解决方案
char *strcpy(char *restrict dest, const char *src);
该
strcpy()
函数将 指向的字符串src
,包括终止的空字节 ('\0'
) 复制到 指向的缓冲区dest
。-更多
Info.IpAddress
是数组类型,UINT8
而不是char*
.
我更喜欢如下
sprintf(CableIP, "%u.%u.%u.%u%c", Info.IpAddress[0], Info.IpAddress[1], Info.IpAddress[2], Info.IpAddress[3], '\0');
推荐阅读
- jenkins - 如果 repo 已经克隆,如何在 Jenkinsfile 中编写条件,跳过该阶段
- python - 我有三个列表,我想创建一个 csv 文件
- android - 使用 beginTransaction() 从一个 Fragment 到另一个 Fragment 的事务
- javascript - 清单错误:页面无法脱机工作
- java - 使用java以秒为单位查找日期之间的差异
- ios - Firestore 基于角色的规则
- c++ - 如何比较两个向量的值
- python - 如何为 tkinter 安装字体
- flutter - 如何获得没有包的构建版本?
- resize - 将行添加到包含相邻列的表(表外)