可见,字符串char*p='helo '的分配方式完全没有问题。 要理解这种赋值方法,首先必须了解双引号(特别注意:这是双引号,分配值时不要加单引号)在此语句中执行了什么操作。 双引号主要做了三项工作。 各不相同
)1)申请空间(在常数区域),保存了字符串。
)2)在字符串的末尾加上了(0)。
)3)返回地
以下为转载:
我学了多年c语言,突然发现连字符串赋值都错了
char a[10];
怎么给这个数组赋值?
1、定义时直接用字符串赋值
char a[10]=“hello”
注:不能在分配值之前进行定义,例如char a[10]。 a [ 10 ]=“hello”这是错误的!
2、给数组中的字符一个个赋值
chara [ 10 ]={‘h’、‘e’、‘l’、‘l’、‘o’};
3、使用strcpy
char a[10]; srcpy(a,“hello”
容易出错的情况:
1、char a[10]; a [ 10 ]=“hello”//一个字符能容纳字符串吗? 而且a[10]也不存在!
2、char a[10]; 在a=“晕圈”//的情况下出现easy,尽管a是指针,但它指向分配给堆栈的10个字符区域。 现在,这个情况a指向数据区域中的hello常数。 这里的指针a很混乱。 我不同意!
然后,不能使用关系运算符“==”比较两个字符串。 只能用strcmp ()函数处理。
在c语言中,字符串被视为字符数组。 因此,字符串有两种声明方式:字符数组和字符指针。
)1)初始化字符数组(直接逐个初始化字符数组)是为数组中的每个元素指定字符的最简单方法。
charstr[10]={‘I”,“a”,“m”,“,h”,“a”,“p”,“y”};
注:如果在大括号中指定的字符数大于数组的长度,则将其视为语法错误。 如果小于数组的长度,则只针对这些字符数组中的上一个元素,其馀元素自动为空字符“ ”。
)用字符串常量初始化字符数组:在c语言中,将字符串作为字符数组处理。 因此,可以使用字符串初始化字符数组。
char str[]={“I am happy”};
也可以省略大括号:
char str[]=“I am happy”;
但是,上述字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值。 只能将一个字符数组赋值给该元素。 下面的赋值方法是错误的
char str[];
str=“I am happy”//错误,字符数组赋值只能按元素赋值
初始化字符数组也有两种方法。
1.char parr[]=“zifuchuanshuzu”;
等效于charr_test[]
2.charcharr_test[]={‘z”,“I”,“f”,“u”,“c”,“u”,“a”,“s”,“h”,“u”,
不等于charr[]
3.charcharr[]={‘z”、“I”、“f”、“u”、“c”、“h”、“u”、“a”、“s”、“h”、“z”
这个方法是错误的。 字符串必须以’ 0’结尾; 字符数组和字符指针初始化为整个字符串,并自动添加’ 0’。 对于字符数组,在用单个字符初始化或赋值时,请务必考虑终止符’ 0’。
)3)字符指针:在c语言中也可以使用字符指针存储字符串。
初始化字符指针:
char* str=“zifuchuanshuzu”