求救大佬!!!!!
求救大佬!!!!!
求救大佬!!!!!
為什么字符指標不能作為strcpy()的第一個引數
煩請看下源代碼
char *a="efgh";
char *c="abcd";
char d[]="abcd";
//strcpy(c,a);
strcpy(d,a);
//指標字串不能作為復制后的字串
uj5u.com熱心網友回復:
因為a,c都是指向只讀資料段,而strcpy是往第一個引數指向的區域寫操作,所以會出現段錯誤。而d是陣列,d指向的位置是可以讀寫操作的。
uj5u.com熱心網友回復:
char *a = "hello segment";
main.cpp:8:15: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
char *a = "hello segment";
現在的編譯器大多情況下都可以提醒你這里是有問題的。
形如字面上的常量(literal value),C/C++標準規定是static storage duration,但是沒有規定必須放在記憶體的什么位置。
對于指標,一般放在text segment或者其它read-only的位置,你是不能改變其數值的;
但陣列一般放在writable的位置,是可以改變的,所以使用陣列定義可變字串是一個小技巧。
但是,即使你用array的形式去創建可改變的字串,這也取決于使用的平臺或系統(但一般情況下是可以的)
uj5u.com熱心網友回復:

從a、c和d的值可以看出來,a和c是在一起的,在程式記憶體的常量區‘而d在程式記憶體的堆疊中,所以可以往d中拷貝資料,但是不能往a和c中拷貝資料
uj5u.com熱心網友回復:
char *c="efgh" 指向常量字串"efgh",在常量存盤區,不能被修改。uj5u.com熱心網友回復:

記憶體分配不同
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/19149.html
標籤:C語言
下一篇:c++ 讀取txt資料
