-
char *a=new char;a="abc";記憶體會洩露嗎?
不,因為你正在定義乙個一維陣列,但你錯了。
char *a="new",char;a="abc";這樣,你就不會犯錯了!
你使用 char* a=new,你使用 char 然後使用指標,顯然,你正在定義乙個指向字串陣列的指標,正確的表示式是:char *a="new",char;a="abc";
如果我誤解了第二個表示式,你的意思是說:字串"abc"給字串變數 a 沒有錯,它是正確的表示式,它不會洩漏記憶體!
一維陣列的下標可以省略,但二維陣列的列下標不能省略,例如char a[10]是正確的,char a[是錯誤的,只有二維陣列會漏記憶體,因為它不能省略列標記。
char *a=new char;a="abc";上面沒有固定的緩衝區,可以儲存一維陣列行號,所以不管你定義了多少個字串,只要省略了行號,就不會有記憶體洩漏!
-
是的,在最初分配空間後,請再次修改其值,使原始分配的記憶體失控且無法分配。
修改動態分配記憶體的指標後,如果需要修改它,請記住先這樣做。
char* a=new char;delete a;a="abc";
-
請在新字元時寫下您的申請。
new char[size],編譯器不會從以後或執行時推斷需要多少記憶體。
我沒有發現當記憶體大小沒有被寫入時編譯器會發生什麼,看起來它應該報告乙個錯誤,如果可以編譯,我猜它可能是 0 或 1 或某個預設值,簡而言之,請求的記憶體可能無法儲存從 cin 接收的字串。
即使你沒有填寫你想要應用的記憶體量,它也會正常工作,但 char *a 指向的記憶體段恰好未使用,如果 cin 的字串輸入足夠長,它很可能會報告錯誤。
-
char a= 這是乙個字元陣列,占用 3 個位元組。 char a="abc"它是不同的,它是一根繩子,最後還有另乙個'\0'終結者,占用 4 個位元組。
-
字串有乙個結尾 (0),所以 strlen 應該是 4(空格 + a + b + c),但在記憶體中,如果結尾,它應該是 5
-
字串 char a=“abc”; 記憶體中占用的位元組數為 (b 4)。
-
換句話說,儲存在變數 s 中的是乙個位址,它是字串“abc”的第乙個位址,即字元'a'位址。
abc"它是乙個字串常量,它是連續儲存的,編譯系統管理它儲存的儲存空間,其實它後面有乙個0(字串終止符)。
S+1) 是 B,因為 S 指向 A,S+1 指向 B(即 S+1 是'b'此字元的位址)。*s+1 的值也是 b,因為 *s+1='a'+1,所以是的'b'字元。
-
首先,有乙個靜態字串“abc”。 然後你把這個指標指向那個字串。
S+1 確實是 B。 但是你沒有很好地使用這個例子。 如果示例中的字串為“CBA”,則 *s+1 為 d,*(s+1) 為 b。 這樣你就可以更好地理解。
-
字串末尾應該有乙個'\0'作為字串結束標誌,所以你應該再請求乙個:
char*temp_name=new char[y+1];
在 for(){ 迴圈之後,新增 temp name[i]='\0';就是這樣。
-
僅比較記憶體位址。
比較字串的正確方法是使用 strcmp(char *s1,char *s2) 函式進行比較,您需要包含
當 strcmp() 返回 0 時,則 s1 和 s2 相等。
-
將字元儲存在單引號中,而不是雙引號中。
-
等同於字元 a[4]="abc"。
還有乙個重複的、自動新增的字串終止符。
這是乙個陣列初始化,它自然地分配記憶體,因為它在初始化時使用""引號,因此會自動新增 0。
char 是 8 位,即 1 個位元組,因此您需要在堆疊上建立乙個包含四個字元的空間。
但有乙個例外。
char *const p = "abc";
字串被分配給字元常量區域。 返回指向 p 的指標。 不會開啟新的堆疊空間。
之所以要新增 const,是因為他指向乙個靜態常量,不能修改。 當然,您可以更改此 p 指向的位址。
-
最好測試這樣的問題,下面就是zhic,c++測試dao,不動手就學不了東西。
#include
#include
using namespace std;
char ss="abc";
int main()
結果 4313088 ABC
-
1.是的,系統初始化為字串"abc“分配的記憶體。
2.這個“ABC"是陣列 A 的第乙個位址。