代码编译执行环境: vs 2012 win32调试
1 .字符数组初始化方式
变量的定义表示变量所属的类型、变量名、分配空间以及初始化初始值的过程。 可见,变量初始化是变量定义的一部分。 除了在const变量中显示的初始化外,如果在定义变量时未显示初始化,编译器将使用缺省值初始化变量。 的赋值和变量的初始化有本质的区别。 具体来说,请参考我的另一个博客。 是初始化的小事。
1 .逐字符初始化
定义字符数组时,可以按字符进行初始化。
char str[10]={ 'h '、' e '、' l '、' l '、' o'};
如果指定的字符小于字符数组的长度,编译器将剩下的字符设置为空字符“ 0”。
用于初始化字符数组的字符串常量1.2
在c语言中,字符串被视为字符数组。 因此,可以使用字符串初始化字符数组。
char str[]={'hello'};
也可以省略大括号。
char str[10]='hello ';
如果长度小于字符数组的长度,则剩下的字符为空字符“ 0”。
因此,可以通过以下方式将单个字符数组初始化为空字符数组:
char test1[256]=';
char test2[256]={''};
char test3[256]={0};
char test3[256]={' '};
2 .字符数组分配
为预定义的字符数组赋值时,无法使用与初始化相同的方法为字符数组赋值。 以下句子是错误的。
char str[10]; //定义已完成(包括编译器缺省初始化) )。
str={'a ',' d ',' s '; //错误
str='abc '; //错误
str={0}; //错误
错误的原因是字符数组名称表示字符数组的目标,不能修改,不能用作左值。 左值的概念请参考博客。 我知道经常被引用为左值。
2.1按字符赋值
)1) for循环的方式。
char str[10];
for(intI=0; I
str[i]=' ';
)2) memset ) )建议使用赋值,因为它比for循环更有效。 当然,字符数组的空白必须在初始化时完成,不应该再一举多得。
char str[10];
memset(str,0,sizeof ) str );
2.2拷贝分配
利用现有字符串,通过memcpy、strcpy或strncpy等函数实现复制赋值。 参考代码如下。
char str[10];
char str2[]='hello ';
memcpy(str,str2,sizeof ) str2);
strcpy(str,str2;
strncpy(str,str2,strlen ) str2) 1;
参考文献