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結反向擊穿狀態,其電流可在很大範圍內變化而電壓基本不變的現象,製成的起穩壓...