#include <stdio.h>
char test1[]="Charlie";
char
*test2="Richard";
int main(void)
{
printf("%s\n",test1);
printf("%s\n",test2);
strcpy(test1,"test1");
//strcpy(test2,"test2"); //這行可以compiler過,不過程式執行會當在這
printf("%s\n",test1);
printf("%s\n",test2);
return 0;
}
char
test1[]="Charlie"; 配置剛好的記憶體空間,並且從literal
constant區域複製字串內容過來,而test1只是個常數,代表這個配置空間的第一個位置
char *test2="Richard";
配置一個指標變數,並且複製literal constant區域內某字串的第一個位置值,所以*test2指向literal
constant這個區域,由於唯讀,所以對其修改會產生Access violuation....
另外這些區域的保護作用,也不是編譯器說了算,是要OS(認出來做處裡)和CPU(的機制)互相配合,才可以實現....
若是某些embedded system的情境下,有可能是literal
constant的區域(section)是放在唯讀記憶體(或flash),所以無法寫入,或者寫也寫不進,如果經過適當的處理(Relocate
和適當的搬移),把literal constant區域複製到RAM上,則存取就沒問題了
沒有留言:
張貼留言