char p char malloc sizeof charstrlen a 1你也可以用陣列,但是陣列不能返回

時間 2021-09-03 07:04:17

1樓:

樓主你好。

要理解程式的內部執行機制哈。你的確用p來分配了空間,可是你想想最後p指向了哪兒?是不是字串的末尾?

所以你puts(p)是不行的。

我之所以用str來分配空間就是讓str始終指向字串的首部,然後用p來進行後移和賦值操作。

明白了吧?還不懂追問吧。

str p

↓ ↓

□□□□□□□□□□□□□□

str始終指向字串首部。

p後移。

2樓:匿名使用者

char* str = (char*)malloc(sizeof(char*) * (strlen(a)+1));

char* p = str;

for(int i = strlen(a)-1; i>=0; i--)

*(p++) = *(a+i);

*p = '\0'; //這時候p這個指標已經指向剛才分配的那塊記憶體的最後一個位元組了。如果再puts(p) 只會輸出'\0';free(p)會出問題;

puts(str);

return str;

3樓:鼻行動物

不大清楚你想問啥,但是你return p; p都被你移到最後了,p指向'\0'了都,所以建議你如果最後要返回這個字串的話,最好

char *des=(char*)malloc(sizeof(char)*(strlen(a)+1));

char *p =des;

最後return str;別忘記free就行。

4樓:去塵遠

你的問題是啥啊?感覺後面的註釋就是答案似的

c語言中,color[n] = (char *)malloc(sizeof(char)*(strlen(str)+1))是什麼意思

5樓:匿名使用者

void main()

for(i = 0; i < n; i++)printf("%s ", color[i]);//打出color[n]陣列共n個

printf("\n");

return 0;

} 這個程式實現的功能是輸入n<20個字串,每個字串長度小於10如果輸入"#"則表示輸入結束,最後打出輸入的字串。

6樓:匿名使用者

malloc函式用於向操作抄系統申請記憶體,bai宣告在stdlib.h中,原型du如下:

void *malloc(unsigned int num_bytes);

malloc申請num_bytes指定zhi大小的記憶體,成功則返回

dao指向這塊記憶體的指標,失敗則返回null。

這條語句含義就是申請記憶體,並將指標轉換為char *型別賦值給color[n],申請的大小為sizeof(char) * (strlen(str) + 1)。

sizeof(char)就是一個char型別佔用的空間大小,strlen(str)為字串str的長度,因為字串最後還有個'\0'表示字串結尾,所以這一塊就表示str字串佔用的記憶體空間的總大小。

7樓:匿名使用者

color[n] = (char *)malloc(sizeof(char)*(strlen(str)+1))

從左復到右講起, 首先制等號左邊是 一個

bai char* 的陣列的一個元素du,也就是zhi一個char* : color[n]; 右邊 是用 malloc分配堆空dao間記憶體, malloc的返回值型別是void*,需要用(char*)來強轉型別以和等號左邊匹配;malloc的 引數是 需要分配的位元組數,也就是 (sizeof(char)*(strlen(str)+1)),sizeof(char)是1,所以實際上就是 strlen(str)+1, strlen返回的是字串的長度(不包括最後一個'\0', 比如 strlen("hello")就是5), 為了儲存這個字串,就要分配長度+1(用來儲存『\0』)的空間。

說到這裡,這個程式的目的也就清楚了, 使用者輸入 顏色的名字,最後一個顏色用#號結束,然後將之列印出來。(我自己用vs2008執行了一遍,結果也如此)

char *p 和 char *p=(char*)malloc(sizeof(char))

8樓:匿名使用者

a *p;沒有初始化,其指向一個未知的空間,可能是其他應用程式正在使用的,也可能是沒有使有的。而p=(a*)malloc(sizeof(a));中的malloc會向當前程序的堆裡申請空間,這個空間是屬於當前程序的,使用完後,應該用free函式釋放,以放回程序堆裡。還有,你結構體裡的s是char型別,你又用p->s="string";編譯時就會有錯。

假如忽略這裡的錯誤,當a *p;p->s=「string";//時編譯通過,但執行後會出現「記憶體不能為write「的情況(因為p是指向了程序沒有分配給它的空間,指向了別的未知空間)。而a *p=(a*)malloc(sizeof(a));//p指向了程序分配給了它的空間,用p可以讀或寫p->s="string"//卻沒有這現象

9樓:匿名使用者

char *p只是定義了一個指標型別的變數,並沒有給該指標分配空間,進行初始化,不能通過該指標進行返問。char *p=(char*)malloc(sizeof(char)),定義了一個指標型別的變數p,並給該指標動態分配了一個字元的空間,可以通過該指標進行訪問該空間。 a *p;p->s=「string";該指標無效,不能對該指標進行任何訪問,也不能對該指標成員變數s賦字串的值,因為s是char型的。

a *p=(a*)malloc(sizeof(a));p->s="string"p分配了空間,但是s是char型的,不能賦字串給它。可以把a型別定義為typedef struct node

a;就可以讓p->s="string"。

10樓:訾可嘉琴囡

如果:輸入:abc

def(回車)

輸出:defdef

而不是樓上說的abcdef

因為p=(char*)malloc(sizeof(char)*20);

//為p建立堆記憶體

q=p;

//將p建立的堆記憶體賦值給q

//也就是說,p,q是指向相同的記憶體

所以說,

輸入:abc

def(回車)

//實質是先把abc輸入p指向的記憶體,再把//def輸入q指向的記憶體

//由於q,p所指向的記憶體是同一記憶體

//所以,值def覆蓋了值abc

因而,記憶體中只有值def

在輸出時,先輸出p,再輸出q,所以輸出def後再輸出def故:如果:

輸入:abc

def(回車)

輸出:defdef

c語言中的 char *p=(char*) malloc(10*sizeof(char)); 能存放16個字母?如下程式段:

11樓:雲淡風輕in蘇州

malloc是在堆上分配空間的額,你分配了一個,超過了1個都是非法的,但是會不會崩潰,什麼時候崩潰要看編譯器處理的時候的策略,與16沒關係。。

12樓:小雯傻豬

從標準上說malloc(sizeof(char))是分配了1位元組大小,當p+1是就已經越界了。

至於你為什麼沒有越界,很可能是你計算機p+1後面有一部分記憶體可以使用,

所以說你能列印16位,已經表明你運氣很好了

char *p=(char *)malloc(sizeof(char)*5); free((int

13樓:gta小雞

釋放指標p所指的地址空間,所以當然是5個位元組。

任何型別的指標最後都會被轉化為void*型處理

c語言定義char **p;p=(char *)malloc(sizeof(char)*5);p是什麼?

14樓:匿名使用者

char **p;定義一個二維指標

p=(char **)malloc(sizeof(char*) *5); 先分配行空間

for( i=0;i<5;i++ )

p[i]=(char *)malloc(sizeof(char)*15); 再分配每一行的空間

這樣才正確

15樓:左灬王

堆指標 **p是堆指標的地址

c語言中怎麼得到一個指標所指的空間的大小,如:char *p=(char *)malloc(10*sizeof(char));

16樓:金色潛鳥

char *p=(char *)malloc(10*sizeof(char)); 我們知道 是 10。但我們沒有簡單方法能獲得「10」。

通過 calloc, malloc, realloc 分配的空間 (實際消耗的heap空間) 用 函式

size_t _msize( void *memblock ); 可以獲得。

獲得的位元組數,可能大於10。估計原因同 分配結構空間類似,考慮對齊或考慮什麼,要多用去一點空間。

#include

#include

main()

我的編譯器編譯運算結果,輸出 是 16。

17樓:情義

"通過 calloc, malloc, realloc 分配的空間 (實際消耗的heap空間) 用 函式

size_t _msize( void *memblock ); 可以獲得。

具體如下:

#include

#include

main()

編譯器編譯運算結果,輸出 是 16。"

18樓:匿名使用者

得不到的,定義常量吧

19樓:匿名使用者

只能10*sizeof(char)

超導磁懸浮下面可以用高溫超導體,也可以用低溫超導體嗎

不可以.超導技術的成熟就是高溫超導體的出現.確切的說,沒有高溫超導體就無法將超導技術投入實產.低溫超導體對溫度的要求十分之高,小範圍的實驗可以實現,用於磁懸浮的話,列車將在一條巨大的冰箱上行駛,它的成本必將數萬倍于飛機,已經沒有存在的必要了. 當然可以啦 1911年,荷蘭科學家昂內斯 ones 用液...

微信支付也可以用京東白條嗎?微信可以用白條支付嘛

現在可以了。京東白條和上海銀行聯合推出了白條分分卡,相當於是一張虛擬銀行卡,可以綁卡至微信支付,就可以在微信轉賬 付款的時候用白條額度了。白條分分卡和白條一起出賬單,直接在京東金融app還款就可以,不需要單獨還款。開卡的時候可以選擇分期期數 3 6 12期 之後產生的消費會自動分期,能減輕一些每個月...

1n4733可以用什麼代替

顏小二述哲文 可用2cw103 5v1代換。1n4733 是精密穩壓二極體,最大耗散功率pzm 1w,穩定電壓vz 5.1伏 最大工作電流izm 179毫安。穩壓二極體,英文名稱zener diode,又叫齊納二極體。利用pn結反向擊穿狀態,其電流可在很大範圍內變化而電壓基本不變的現象,製成的起穩壓...