下面的代码那里发生了段错误int atSendRecv(const char *send, char* response) { int ret; int simid = 1; char resp[4096]; memset(resp, 0, sizeof(resp)); if (QL_ERR_GENERAL_SUCCESS != (ret = ql_atc_init())) { printf("atSendRecv ql_atc_init failed"); return ret; } printf("atc init ok"); if (QL_ERR_GENERAL_SUCCESS != (ret = ql_atc_send(simid, send, resp, sizeof(resp)))) { printf("!!! atSendRecv ql_atc_send(%s) printf:%d", send, ret); if (QL_ERR_GENERAL_SUCCESS != ql_atc_release()) { printf(" atSendRecv. ql_atc_release failed"); } return ret; } printf("--> send %s", send); strcpy(response, resp); if (QL_ERR_GENERAL_SUCCESS != (ret = ql_atc_release())) { printf("atSendRecv.. ql_atc_release failed"); return ret; } printf("atc release ok"); return ret; } int getSIM_ICCID(char *itemStr) { char *response; int retAT; char tempbuf[4096] = {0}; char itemBuf[64] = {0}; char *p,*q; retAT = atSendRecv("AT+CCID", response); strcpy(tempbuf, response); p = strstr(tempbuf, "+CCID: "); q = strstr(tempbuf, "OK"); int i = strlen("+CCID: "); if(p != NULL && q != NULL) { strncpy(itemStr, p+i, (q-p)-i); } trim_invalid(itemStr); return retAT; }
时间: 2024-04-04 21:32:51 浏览: 82
(const) char 转CString 详解(字符串类型转换详解,不断补充)
在函数atSendRecv中,char *response没有分配内存空间,而在调用函数atSendRecv时,传递的是一个未初始化的指针,导致在函数内部使用response时发生了段错误。需要在调用getSIM_ICCID前,为response分配足够的内存空间。可以使用malloc或者传递一个已经分配好内存空间的字符数组作为参数。
阅读全文