char *str = “hello”
表示在动态变量区开辟一个存放指针的存储单元,指针变量名为str,这个str指向常量区的”hello”,因此不能更改这个字符串的值,比如str[0]='e'
这样不行。char str[] = "hello"
表示在动态变量区开辟一个能连续存放6字节的字符串数组,str是数组名称,其数组内容可以被修改,定义在函数中因为是局部变量不能return。
字符串数组定义
char s1[5] = {"abcd"}
等同于char s1[5] = "abcd"
sizeof(s1) = 5
,strlen(s1) = 4
char s2[5] = {'a','b','c','d'}
sizeof(s2) = 5
,strlen(s2) = 不确定数
char s3[] = {"abcd"}
等同于char s3[] = "abcd"
sizeof(s3) = 5
,strlen(s3) = 4
char s4[] = {'a','b','c','d'}
sizeof(s4) = 4
,strlen(s4) = 不确定数
总结:定义成“ ”双引号格式的话,会自动加’\0’结束符,strlen计算字符串长度时遇到’\0’结束(其计算的长度不包括’\0’),sizeof是运算符,计算的是分配的内存大小。定义字符串的话尽量用char s[5] = “abcd”
(要给’\0’留一个字节的位置)或者char s[] = “abcd”
(最推荐)。
sizeof与strlen的区别详细参考: https://blog.csdn.net/magic_world_wow/article/details/80500473