如何将字符串存储到字符指针?
我有下面的程序如何将字符串存储到字符指针?
#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);
为什么*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");
所以,你的意思是说,当我们分配一个字符串文字时,它将被存储在内存中的某处,并且该地址将被分配? – Karthick
是的。另外使用'char * string =“abc”;'你以后不能更改内容。请参阅例如[C程序字符串文字](http://stackoverflow.com/questions/7774770/c-program-string-literals) –
*string
是点出了单character.Here一个困惑是字符串文字。它不是一个角色。
*string='a'; // It will work.
Don't cast malloc及其家族的结果。
您可以使用strcpy
函数来执行此操作。
strcpy(string,"abc");
总是喜欢'INT主要(无效)''以上无效的主要()' –
标准警告:请[不要投(http://stackoverflow.com/q/605845/ 2173917)'malloc()'和'C'中的家族的返回值。 –