2015-04-07 76 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");