首页 > 解决方案 > 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)

一个单独的数组元素打印获取正确的数据,但如果我进行连接会出错。

你能告诉我,我在哪里做错了吗?

标签: candroid-source

解决方案


   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');

推荐阅读