void main{
\*
...
*/
void *task_net = NULL;
const char *wifi_set[2]={"wintech524","wintech524"};
if (os_task_create(&task_net, ((const char*)"net config init"),net_config_thread,wifi_set/*NULL*/, 4096, 1) != 1) {
printf("\n\r%s xTaskCreate(net config init) failed", __FUNCTION__);
/*
上面if 可以簡單想成
net_config_thread(wifi_set);
*/
}
}
void net_config_thread(const char *wifi_set[2])
{
connect_net_by_at(wifi_set);
/*
....
*/
do{}while(1);
os_task_delete(NULL);
}
void connect_net_by_at(const char *wifi_set[2]){
const char *ssid=wifi_set[0];
const char *pw=wifi_set[1];
printf("\n SSID=%s \nPW=%s\n",ssid,pw);
/*
....
*/
printf("\n----------WIFI connected\n");
}
想問一下為甚麼上面這個寫法會有問題?我最後的到的ssid跟pw是
SSID=@2� �z
PW=
單純是因為這個韌體的原因導致程式不work還是我邏輯錯誤呢?
我有在電腦上試過
void f1(const char *id[2]){
const char *ssid,*pw;
ssid=id[0];
pw=id[1];
printf("ssid=%s\n",ssid);
printf("pw=%s\n",pw);
id[0]="wintech524"; <<------
id[1]="wintech524"; <<-------
printf("---------------\n");
}
int main(void) {
const char *id[2]={"test","test1"};
f1(id);
printf("%s\n",id[0]);
return 0;
}
雖然結果如我預期
但請問這樣的寫法是合法的嗎?
另外f1中對id[0]給一個新的常數字串,這個常數字串的記憶體會被分配到哪?不會因為離開f1而被回收嗎?
**後來有在PTT看到類似的提醒,理論上指標傳入函式能改值但是不能改他指到的地址 如下圖
應該是會有問題吧? 雖然我記憶體不是malloc出來的
但我在repl.it上執行卻改了 有點搞不懂
**
同樣,我在晶片8720上執行 一段函式,並不如我預期
#define MQTT_HONEY_PUB_ALERT "ALERT"
#define MQTT_HONEY_PUB_TAG "TAG"
const char* pub_topic = "";
cJSON *IOTJSObject=NULL;
IOTJSObject = cJSON_CreateObject();
tag_data_transform_mqtt(IOTJSObject,pub_topic);
if(pub_topic!=""){...}
void tag_data_transform_mqtt(cJSON *IOTJSObject,const char *pTopic){
if(tag_data1.groupC_button==0x01){
pTopic=MQTT_HONEY_PUB_ALERT;
...
}
else{
pTopic=MQTT_HONEY_PUB_TAG;
...
}
結果pub_topic永遠等於""
是因為甚麼呢?