如何将字符串存储到char指针中?

4
我对以下程序有些困惑。
#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 main(void) 而不是 void main() - Sourav Ghosh
1
标准警告:请不要在C语言中对malloc()及其相关函数的返回值进行强制转换。 - Sourav Ghosh
2个回答

2

为什么*string = "abc"不起作用?

string被定义为指向char的指针。*string是一个char。 "abc"是一个字符串文字。实际上,您正在将字符串文字的地址分配给char,并且编译器应该发出警告:

warning: assignment makes integer from pointer without a cast

例如,*string = 'a'; 将起作用,因为只有一个字符被分配。 string = "abc" 是如何工作的?
因为指向字符串字面量 "abc" 的地址被分配给了指向字符的指针 string
顺便说一句,这样做会丢失之前通过 malloc() 分配的内存,并导致内存泄漏。
如何将字符串存储到字符指针中?你可以只使用:
strcpy(string, "abc");

你的意思是说,每当我们分配一个字符串字面量时,它都会被存储在内存中,并且该地址将被分配? - Karthick
是的。此外,使用 char * string =“ abc”; 你不能在以后更改内容。例如,请参阅C程序字符串文字 - Anto Jurković

1

*string 指出单个字符。这里的 "abc" 是字符串字面量,不是一个字符。

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

不要类型转换 malloc 及其相关函数的返回值。

可以使用 strcpy 函数来实现这一点。

strcpy(string,"abc");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接