目录
1.数组直接定义赋值字符串。
2.给(数组)定义后再赋值字符串。
3.直接给指针赋值字符串。
4.先声明一个指针,再赋值字符串。
#include
#include
int main()
{
char str[128] = "dasdasdasda";
printf("%s\n",str);
int i;
for(i=0;i
2.1错误做法: char str[128];
str = "abcdef";
注意:不可以给数组名赋值字符串(不合法的)。因为:数组名 str 指向的地址是数组的首地址 str[0] ,这个值是固定的。而字符串"abcdef"也有它本来指向的空间。
字符串的双引号做了3件事:
1.申请了空间(在常量区),存放了字符串
2. 在字符串尾加上了’/0’
3.返回地址
2.2正确给(数组)定义后再赋值字符串做法,此时要用拷贝函数strcpy( ),代码如下:
#include
#include
int main()
{
char str[128];
strcpy(str,"正确赋值字符串");
printf("%s\n",str);
system("pause");
return 0;
}
char *str = "abcdef";
初始化可以直接用指针指向该字符串。
因为字符串"abcdedf"有自己的空间,只是让指针str指向了这个空间。
4.1:这样赋值也是可以的,定义了一个指针,指针指向了字符串常量
char *str;
str = "abcdef";
4.2:错误做法
char *str;
strcpy(str,"abcdef");
此时的str是一个野指针,野指针没有指向的空间。不能往野指针里面放东西。
4.3:正确做法,让指针指向一个malloc的空间,再初始化memset,代码如下。
#include
#include
int main()
{
char *str;
str = (char *)malloc(128);
memset(str,'\0',128);
strcpy(str,"正确赋值字符串");
puts(str);
system("pause");
return 0;
}
(摘录)初始化时,字符串常量 被编译器存放在了 常量区,空间的大小和位置都已经确定了,自然就可以把地址赋值给指针,了解了这个,就清楚知道为啥 有时候,需要先动态分配空间,并把空间地址赋值给某个指针,再通过这个指针才能存放字符串。