我对以下程序感到困惑
#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);
答案 0 :(得分:1)
*string
指出单个字符。这里"abc"
是字符串文字。它不是一个角色。
*string='a'; // It will work.
Don't cast malloc及其家族的结果。
您可以使用strcpy
功能执行此操作。
strcpy(string,"abc");
答案 1 :(得分:0)
为什么*string = "abc"
无效?
string
被定义为char的指针。 *string
是一个字符。 "abc"
是一个字符串文字。您实际上是将字符串文字的地址分配给char,编译器应该发出如下警告:
warning: assignment makes integer from pointer without a cast
例如,*string = 'a';
将起作用,因为只分配了一个字符。
string = "abc"
如何运作?
因为字符串文字"abc"
的地址被分配给string
,这是一个指向char的指针。
顺便说一句,这样做会导致malloc()
丢失先前分配的内存并导致内存泄漏。
如何将字符串存储到char指针中?你可以使用:
strcpy(string, "abc");