1樓:夏水秋池
因為 p 沒有分配記憶體,指向的是系統的記憶體,那段記憶體是隻讀的,因此改變那裡的值是錯誤的
char a = "abcde";
char *p = a;
*(p+1) = 'w'; // 這樣是正確的,因為a那段記憶體是可寫的
你上面的,你可以理解為
const char a = "abcde";
char *p = a;
*(p+1) = 'w'; // 錯誤,因為a是const的,也就是隻讀的
2樓:匿名使用者
這就說到程式在記憶體中資料的儲存了。
程式在記憶體中,會有四個區,資料區,**區,棧區,以及堆區。
靜態變數和全域性變數存在於資料區,申請的自動變數放在棧區,動態申請的記憶體則放在堆區,編譯成的彙編語句則放在**區。
所以看你上面的問題,指標p指向的是一個字串,而字串儲存在資料區,其內容是不允許被修改的,所以,會出錯。
而如果你讓p指向棧區的內容,則可以對其指向內容進行修改,正如@夏水秋池 @所說的那樣,你稍作修改就可以了。
這裡還有一個更詳細的解答,共同學習了!
3樓:匿名使用者
因為p指向的是常量字串"abcde"
常量字串是不允許修改的
所以*(p+1)= 'w'; 回報地址不允許訪問異常改為char *p=(char *)malloc(sizeof(char)*20);
strcpy(a,"abcde");
*(p+1)= 'w';
...........
..........
..........
free(p);
4樓:匿名使用者
你沒有弄清楚基本概念。
*p是指標!而且是指向常量的指標。並不分配記憶體,它是隻讀的,當然無法改變值。
如果需要改變值。需要改為 char p="abcde"。
我不知道你是怎麼通過編譯的。
5樓:匿名使用者
「abcde」是常量字串,記憶體空間不可寫,你強行改寫這段記憶體肯定出問題。
關於字串和指標的問題
6樓:匿名使用者
30.b,c錯。
b錯是因為s4指向的是常量字串,不能修改其值。
c錯是因為s3未定義,指向的是未知空間
31。d錯。加上隱藏的字串結束符,一共是11個字元32。c。執行strcpy(p,」abcd」)後,p就是"abcd"了,長度當然是4
7樓:匿名使用者
應該是ccd,第一題肯定是c,因為指標s3在呼叫前未指向某個具體的記憶體,第二題和第三題不太確定,第三題應該是abcabcd共7個吧。。。。僅供參考哈。。。。
字串與字元指標的問題:為什麼用陣列定義的字串可以修改,而用指標定義的不能修改?
8樓:
char *p="abcde";
這種方式是定義了一個字元型指標,指向常量字串"abcde"
char p="abcde";
這種方式是定義了一個字元陣列,其長度自動設定其等於"abcde",所以第一種指向了常量區,無法修改;第二種定義了普通的陣列變數,放在棧中,可以修改
9樓:愛曉橋
因為再定義字元指標時預設的在前面有一個const就是無法修改它的值。
10樓:匿名使用者
"i love you china, do you love me?"
在存放在.rodata段,該段是隻讀的,當你強行做修改的時候,當然要報錯嘍。
而定義為陣列的形式之後:就把這個字串拷貝進陣列了,對於陣列中的內容,可以隨便修改呀. 原來的字串還是不變的。。。
具體回答,參考我的部落格
html字串拼接,html字串拼接流程?
假設你的 tbody detail 是一個div標籤那麼後的效果是 執行後得出alert的內容是 相當於jquery自動補全了標籤,所以你應該寫 所有項都直接用字串拼接的方式 var resulthtml for var i 0,len datas.length i len i resulthtml...
c語言問題將字串a複製到字串b中
1 首先需要建立一個新的檔案,輸入標頭檔案和主函式。2 接下來需要定義變數型別。3 設定完變數型別之後開始呼叫cpy函式。4 接下來需要定義一個函式,並定義變數型別。5 最後加一個字串結束符,並在主函式中輸出。6 編譯。執行,可以看到字串a複製到字串b中。將字串a複製到字串b中,簡單的方法是使用st...
如何從字串中刪除最後字元,如何從字串中刪除最後一個字元
string.slice 0,1 可以用第二個引數負數表示要去除幾位 char s 100 fgets s,sizeof s fp 從fp指向的檔案中提出最多100個字元的一行字元。s strlen s 1 0 讓最後一個字元的ascii碼為0,即結束標誌。fputs s,fw 將s寫入fw指向的檔...