C语⾔:数组赋值字符串,指针赋值字符串需要malloc给空间,初始化memset(常常纠结。。。
直接定义赋值都是没有问题的,正确的。但是数组,指针定义了之后再赋值则有规则。
⽬录
。
1.数组可以直接定义赋值字符串。如char str[128] = "dasdasdasda"; 此时的访问可以⽤字符串的占位符%s,也可以⽤数组的for( )循环访问。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[128] = "dasdasdasda";
printf("%s\n",str);
int i;
for(i=0;i<strlen(str);i++){
printf("%c\n",str[i]);
}
system("pause");
return 0;
}
2.给(数组)定义后再赋值字符串。此时要⽤拷贝函数strcpy( )。
2.1错误做法: char str[128];
str = "abcdef";
注意:不可以给数组名赋值字符串(不合法的)。因为:数组名 str 指向的地址是数组的⾸地址 str[0] ,这个值是固定的。⽽字符串"abcdef"也有它本来指向的空间。
字符串的双引号做了3件事:
1.申请了空间(在常量区),存放了字符串
2. 在字符串尾加上了’/0’
3.返回地址
2.2正确给(数组)定义后再赋值字符串做法,此时要⽤拷贝函数strcpy( ),代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[128];
strcpy(str,"正确赋值字符串");
printf("%s\n",str);
system("pause");
return 0;
}
3.直接给指针赋值字符串。
char *str = "abcdef";
初始化可以直接⽤指针指向该字符串。
因为字符串"abcdedf"有⾃⼰的空间,只是让指针str指向了这个空间。
4.先定义⼀个指针(也叫野指针,没有指向的空间),再赋值字符串。
此时需要给指针先malloc给空间,让指针指向这个malloc开辟的空间,再初始化memset。
4.1:这样赋值也是可以的,定义了⼀个指针,指针指向了字符串常量
char *str;
str = "abcdef";
4.2:错误做法
char *str;
strcpy(str,"abcdef");
此时的str是⼀个野指针,野指针没有指向的空间。不能往野指针⾥⾯放东西。
4.3:正确做法,让指针指向⼀个malloc的空间,再初始化memset,代码如下。
#include <stdio.h>
#include <stdlib.h>
int main()
{
molloc函数
char *str;
str = (char *)malloc(128);
memset(str,'\0',128);
strcpy(str,"正确赋值字符串");
puts(str);
system("pause");
return 0;
}
(摘录)初始化时,字符串常量 被编译器存放在了 常量区,空间的⼤⼩和位置都已经确定了,⾃然就可以把地址赋值给指针,了解了这个,就清楚知道为啥 有时候,需要先动态分配空间,并把空间地址赋值给某个指针,再通过这个指针才能存放字符串。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论