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永遠等於""
是因為甚麼呢?