字串指標移動問題,關於字串和指標的問題

2021-12-22 17:51:14 字數 2063 閱讀 9939

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指向的檔...