1. 程式人生 > >字串常量不可賦值,字元陣列可以

字串常量不可賦值,字元陣列可以

C語言中除了初始化外,給字串賦值的方法有memcpy、strcpy和sprintf。

專案中將使用到的字串定義為常量,然後試圖用sprintf改變它的值,一直失敗,後來定義改為字元陣列就可以了。程式碼如下:

            char *str = "aaaa";
        	char chArray[] = "aaaa";

        	sprintf(str,"%s","bbbb");
        	sprintf(chArray,"%s","bbbb");

        	strcpy(str,"cccc");
        	strcpy(chArray,"cccc");

        	memcpy(str,"dddd",5);
        	memcpy(chArray,"dddd",5);

 上面的程式執行後,str一直保持為"aaaa",chArray則從aaaa到bbbb,到cccc,在到dddd變化。最後memcpy的長度為5,是因為字串最後要有個'\0'。

這是因為字串常量儲存在靜態儲存區,指標str是個區域性變數,儲存在棧內,它的內容就是靜態儲存區的地址。字元陣列是個區域性變數,儲存在棧內,chArray是首個字元的地址。