static char *TCPCommand; static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; int SetUpTCPtoSendInformation(char option[], char **command) { static int isFirstCall = 1; pthread_mutex_lock(&mutex); // 加锁 if (isFirstCall && strstr(option, "set")) { CON_LOG("33\n"); if (TCPCommand != NULL) { free(TCPCommand); CON_LOG("33\n"); } CON_LOG("33\n"); TCPCommand = malloc(strlen(*command) + 1); CON_LOG("33\n"); if (TCPCommand == NULL) { printf("Failed to set and obtain TCP command variable memory allocation\n"); goto fail; } CON_LOG("33\n"); strcpy(TCPCommand, *command); CON_LOG("set:%s\n", TCPCommand); isFirstCall = 0; goto succeed; } else if (!isFirstCall && strstr(option, "get") && TCPCommand != NULL && strlen(TCPCommand)) { free(*command); *command = malloc(strlen(TCPCommand) + 1); strcpy(*command, TCPCommand); CON_LOG("get:%s\n", *command); memset(TCPCommand, '\0', strlen(TCPCommand)); free(TCPCommand); TCPCommand = NULL; isFirstCall = 1; goto succeed; }else { *command = malloc(1); if (*command == NULL) { CON_LOG("Failed to allocate memory for command\n"); goto fail; } **command = '\0'; CON_LOG("Invalid option\n"); goto fail; } fail: pthread_mutex_unlock(&mutex); // 解锁 return 0; succeed: pthread_mutex_unlock(&mutex); // 解锁 return 1; } SetUpTCPtoSendInformation("set","echo `uci get m_system.usesiminfo.operator;uci get m_system.usesiminfo.card_slot; \ uci get m_system.usesiminfo.iccid;uci get m_system.usesiminfo.lock;uci get m_system.system.simnum`");调用报错, 到这一行代码TCPCommand = malloc(strlen(*command) + 1);程序退出
时间: 2024-04-13 12:29:55 浏览: 136
根据您提供的代码和描述,调用 `SetUpTCPtoSendInformation("set", "echo `uci get m_system.usesiminfo.operator;uci get m_system.usesiminfo.card_slot; uci get m_system.usesiminfo.iccid;uci get m_system.usesiminfo.lock;uci get m_system.system.simnum`");` 时报错并退出的问题可能是由于传递给函数的参数不正确导致的。
根据代码,`SetUpTCPtoSendInformation` 函数期望接收一个字符串数组作为参数 `option[]`,而参数 `command` 是一个指向指针的指针 `char**`。在您的调用中,第二个参数应该是一个指向字符串的指针,而不是直接传递一个字符串常量。
请尝试将调用代码修改为以下形式:
```c
char* command = "echo `uci get m_system.usesiminfo.operator;uci get m_system.usesiminfo.card_slot; \
uci get m_system.usesiminfo.iccid;uci get m_system.usesiminfo.lock;uci get m_system.system.simnum`";
SetUpTCPtoSendInformation("set", &command);
```
这样修改后,我们先创建一个字符指针 `command` 并将其初始化为字符串常量,然后将其地址(`&command`)传递给函数。
请注意,由于函数参数 `command` 是一个指向指针的指针(`char**`),我们需要使用 `&command` 来传递指针的地址。
如果问题仍然存在,请提供更详细的错误信息或相关代码,以便我可以更好地帮助您解决问题。
阅读全文