1樓:施小平
char *p3="123456"; //123456\0在常量區,p3在棧上。
試圖改變常量區的變數,會出錯或者崩潰。
參考資料:
首先要搞清楚編譯程式佔用的記憶體的分割槽形式:
一、預備知識—程式的記憶體分配
一個由c/c++編譯的程式佔用的記憶體分為以下幾個部分
1、棧區(stack)—由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於
資料結構中的棧。
2、堆區(heap)—一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os**。注意它與資料
結構中的堆是兩回事,分配方式倒是類似於連結串列,呵呵。
3、全域性區(靜態區)(static)—全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態
變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式結束後由系統
釋放。4、文字常量區—常量字串就是放在這裡的。程式結束後由系統釋放。
5、程式**區
這是一個前輩寫的,非常詳細
//main.cpp
int a=0; //全域性初始化區
char *p1; //全域性未初始化區
main()
2樓:匿名使用者
這個定義有問題吧?
char s1* = "hello";
應該是*s1;
**沒有什麼問題。
3樓:
沒發現段錯誤啊 我在redhat enterprise linux 下測試的
估計你傳入的應該是常量
常量字串在訪問的時候會出現段錯誤
4樓:匿名使用者
傳入的不會是常量字串吧
5樓:匿名使用者
for(i = 0;i < (n + 1) / 2; i++)
你試試!
求救!C語言中字串函式strncpy的輸出問題
strncpy 不會在目標字串末尾加 0 字元。而函式的臨時變數一般儲存在棧中 先進後出 所以就輸出了 s2 中複製的 today 然後輸出s2陣列6個字元之後的部分,即棧中的垃圾資料 未初始化的陣列在記憶體中一般是 0xcc,就是燙燙燙 然後輸出字串 s,直到 s 中的 0 字元輸出結束。因為st...
請問簡單的數字字串的儲存格式問題
我記得大一時候學的c,就拿c來簡單說一下吧首先是字元,字元型資料在記憶體中佔一個位元組,就是說當定義了一個char型別的變數時,系統分配給它一個位元組的記憶體空間,可以儲存一個ascii碼字元,字元值為0 255。而對於字串,可以看作是一段連續的字元,當你給一個char 的指標變數分配了n個記憶體單...
請編寫函式fun,它的功能是統計指定字串中字母字元的個數並返回統計結果。請在主函式main中呼叫它
include int fun char psztext,int nlen return ncount void main include int fun const char buf return count int main void include void fun char str int ...