2015-04-07 59 views
2

我有下面的程序如何將字符串存儲到字符指針?

#include<stdio.h> 
void main() 
{ 
char *string; 
string = (char *)malloc(5); 
string = "abc"; // <<<<<<<<<< why *string="abc" is not working. How string = "abc" is working? 
printf("%s", string); 
} 

但與整數相同的程序工作

char *i; 
i=(int *)malloc(sizeof(int)); 
*i=4; <<<<<<<< this is working fine 
printf("%d",*i); 
+1

總是喜歡'INT主要(無效)''以上無效的主要()' –

+1

標準警告:請[不要投(http://stackoverflow.com/q/605845/ 2173917)'malloc()'和'C'中的家族的返回值。 –

回答

0

爲什麼*string = "abc"不工作?

string被定義爲指向char的指針。 *string是一個字符。​​是一個字符串文字。你實際上是分配字符串文字到char和編譯器的地址應發出警告,如:

warning: assignment makes integer from pointer without a cast 

例如,*string = 'a';會工作,因爲只有一個字符被分配。

如何string = "abc"正在工作?

因爲字符串文字​​的地址被分配給string這是一個指向char的指針。

而順便說一下,這樣做會導致您以前分配的內存丟失了malloc()併產生了內存泄漏。

如何將字符串存儲到字符指針?你可以使用:

strcpy(string, "abc"); 
+0

所以,你的意思是說,當我們分配一個字符串文字時,它將被存儲在內存中的某處,並且該地址將被分配? – Karthick

+0

是的。另外使用'char * string =「abc」;'你以後不能更改內容。請參閱例如[C程序字符串文字](http://stackoverflow.com/questions/7774770/c-program-string-literals) –

1

*string是點出了單character.Here​​一個困惑是字符串文字。它不是一個角色。

*string='a'; // It will work. 

Don't cast malloc及其家族的結果。

您可以使用strcpy函數來執行此操作。

strcpy(string,"abc");