iOS开发 ----- 关于char *的赋值和字符串之间的复制问题以及sizeof strlen
来源:互联网 发布:传奇盛世心法升级数据 编辑:程序博客网 时间:2024/05/22 17:03
今天来捯饬捯饬关于char*的问题
1 关于数组长度的问题
char a[]={'a','b','c','d','e'};int len=sizeof(a);printf("len = %d\n",len); //输出5,直接得出数组长度
2,对于数组来说sizeof和strlen的区别
char b[20]="this is a string";int len_b_sizeof=sizeof(b);int len_b_strlen=strlen(b);printf("len_b_sizeof = %d\n",len_b_sizeof);//输出20,sizeof输出的时b分配是的内存大小printf("len_b_strlen= %d\n",len_b_strlen);//输出16,strlen输出的时字符串的长度
3.char *类型的字符的大小
char *c="s"; printf("c.sizeof = %lu\n",sizeof(c));//输出8,定义一个char *的时候,系统会默认分配8个字节的大小空间 printf("c.strlen = %lu\n",strlen(c));//输出1,其实正真的长度是1
4.不同类型的sizeof,Mac下的情况
int aa; char bb[10]; char *cc; float dd; printf("sizeof int = %lu\n",sizeof(aa));//4 printf("sizeof char b[] = %lu\n",sizeof(bb));//10 printf("sizeof char *c = %lu\n",sizeof(cc));//8 printf("sizeof float = %lu\n",sizeof(dd));//4
5,数组赋值
char test[20]; scanf("%s",test); getchar(); printf("test is %s\n",test);//可以打印出输入的内容
6,数组中间的赋值
char test2[20]; strcpy(test2,test); printf("test2 is %s\n",test2);//可以把上边输入的东西,复制到test2中
7,char *类型的赋值
//情况是这样的,比较特殊,如果在上述5,6存在的情况下,该代码可以运行,但没有的话,是不可以的,(Mac下) //非常不建议大家这样做,因为这样做的结果就是会导致test3的地址是不确定的,不知道他到底指向哪里 //虽然可以运行,但会非常不安全,而且不小心的话,会爆段错误,segmentation fault //重要的事要说三遍,不安全,不安全,不安全 char *test3; printf("char *test3 \n"); scanf("%s",test3); printf("test3 is %s\n",test3);
这里会爆段错误
8.malloc动态分配,更安全的做法
//这样在输入,或者做字符串中间的拷贝等等是不会报错的,最安全的一种做法 char *str1="sdafadsf"; char *str2=(char *)malloc(sizeof(char *)); char *str3=(char *)malloc(sizeof(char *)); char *str4=(char *)malloc(sizeof(char *)); strcpy(str2,str1); printf("please input str3 :"); scanf("%s",str3); getchar(); strcpy(str4,str3); printf("str1 is %s\n",str1); printf("str2 is %s\n",str2); printf("str3 is %s\n",str3); printf("str4 is %s\n",str4); free(str2); free(str3); free(str4);
0 0
- iOS开发 ----- 关于char *的赋值和字符串之间的复制问题以及sizeof strlen
- char字符串数组与string之间的转换,以及sizeof,strlen,length的区别
- 关于字符串的sizeof()和strlen()
- 字符串的strlen 和sizeof
- 关于strcpy,strlen以及char*和数组之间的一点关系
- char[]:strlen和sizeof的区别
- char*中sizeof和strlen的区别
- char *s和char s[]的区别与联系以及strlen()和sizeof()的用法
- 由strcat函数引发的对char *a和char a[]以及sizeof和strlen
- 了解sizeof和strlen以及关于数组的相关计算
- sizeof和strlen之间的区别
- VC++ sizeof和strlen之间的区别
- 详解sizeof和strlen之间的区别
- 芒果iOS开发sizeof和strlen的区别
- 发现关于数组求其长度 strlen 和 sizeof的问题
- QString和char 以及string之间的赋值
- 关于CString与char *之间的赋值问题
- IOS开发NSString与int和float的相互转换以及字符串拼接、NSString、NSData、char* 类型之间的转换
- pagerank以及个性化的pagerank算法
- STM32CUBE学习——5
- #static,final,抽象,接口,多态,内部类,单子和工厂设计模式
- hdu 5294 Tricks Device 2015 Multi-University Training Contest 1 isap + dijkstra
- DirectX11 创建视图-投影矩阵
- iOS开发 ----- 关于char *的赋值和字符串之间的复制问题以及sizeof strlen
- hdu5288(2015多校1)OO’s Sequence
- [Android]自定义ListView:上拉加载更多
- 关于DateTime
- Quartz 定时任务设置某个时间区间每隔一定时间触发的cron表达式
- Android 第二天 类的复习
- 【bzoj2084】 POI2010 Antisymmetry manacher
- 【分布式集群】hadoop-2.6.0集群实例(接上一篇)
- web开发必备工具