为指针分配的内存太小
生活随笔
收集整理的這篇文章主要介紹了
为指针分配的内存太小
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
為指針分配的內(nèi)存太小
(1)為指針分配了內(nèi)存,但是內(nèi)存大小不夠,導(dǎo)致出現(xiàn)越界錯誤。?
(2)char *p1 = “abcdefg”;?
? ? ?char *p2 = (char *)malloc(sizeof(char)*strlen(p1));?
? ? ?strcpy(p2,p1);
? ? ?p1 是字符串常量,其長度為7 個字符,但其所占內(nèi)存大小為8 個byte。初學(xué)者往往忘了字符串常量的結(jié)束標(biāo)志“\0”。這樣的話將導(dǎo)致p1 字符串中最后一個空字符“\0”沒有被拷貝到p2 中。
(3)解決的辦法是加上這個字符串結(jié)束標(biāo)志符: char *p2 = (char *)malloc(sizeof(char)*strlen(p1)+1*sizeof(char)); 這里需要注意的是,只有字符串常量才有結(jié)束標(biāo)志符。比如下面這種寫法就沒有結(jié)束標(biāo)志符了:
char a[7] = {.a.,.b.,.c.,.d.,.e.,.f.,.g.};另外,不要因為char 類型大小為1 個byte 就省略sizof(char)這種寫法。這樣只會使你的代碼可移植性下降。
(1)為指針分配了內(nèi)存,但是內(nèi)存大小不夠,導(dǎo)致出現(xiàn)越界錯誤。?
(2)char *p1 = “abcdefg”;?
? ? ?char *p2 = (char *)malloc(sizeof(char)*strlen(p1));?
? ? ?strcpy(p2,p1);
? ? ?p1 是字符串常量,其長度為7 個字符,但其所占內(nèi)存大小為8 個byte。初學(xué)者往往忘了字符串常量的結(jié)束標(biāo)志“\0”。這樣的話將導(dǎo)致p1 字符串中最后一個空字符“\0”沒有被拷貝到p2 中。
(3)解決的辦法是加上這個字符串結(jié)束標(biāo)志符: char *p2 = (char *)malloc(sizeof(char)*strlen(p1)+1*sizeof(char)); 這里需要注意的是,只有字符串常量才有結(jié)束標(biāo)志符。比如下面這種寫法就沒有結(jié)束標(biāo)志符了:
char a[7] = {.a.,.b.,.c.,.d.,.e.,.f.,.g.};另外,不要因為char 類型大小為1 個byte 就省略sizof(char)這種寫法。這樣只會使你的代碼可移植性下降。
總結(jié)
以上是生活随笔為你收集整理的为指针分配的内存太小的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言定义了一个结构体怎么分配内存?C\
- 下一篇: 内存分配成功,但并未初始化