字符数组初始化问题
2018-01-08 13:29
375 查看
在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串。总结起来有以下三种方式:
(1) char a[10]="";
(2) char a[10]={'\0'};
(3) char a[10]; str[0]='\0';
第1,2种方式是将a数组的所有元素都初始化为'\0',而第3种方式是只将str数组的第一个元素初始化为'\0'。如果数组的size非常大,那么前两种方式将会造成很大的开销。
所以,除非必要(即我们需要将str数组的所有元素都初始化为0的情况),我们都应该选用第3种方式来初始化字符串数组。
int arrayl[5]={1,2,3,4,5,6}; //error-初始化值个数多于数组元素个数
2 int array2[5]={1,,2,3,4}; //error:初始化值不能省略
3 int array3[5]={1,2,3,}; //error:初始化值不能省略
4 int array4[5]={}; //error:语法格式错误
初始化值的个数可少于数组元素个数。当初始化值的个数少于数组元素个数时,前面的按序初始化相应值, 后面的初始化为0(全局或静态数组)或为不确定值(局部数组)。
2.初始化字符数组
初始化字符数组有两种方法,一种是:
char array[10]={"hello"};
另一种是:
char array[10]={'h','e','l','l','\0'};
第一种方法用途较广,初始化时,系统自动在数组没有填值的位置用,'\0'补上。另外, 这种方法中的花括号可以省略,即能表示成:
char array[10]="hello";
第二种方法一次一个元素地初始化数组,如同初始化整型数组。这种方法通常用于输入不容易在键盘上生成的那些不可见字符。
例如,下面的代码中初始化值为若干制表符:
char chArray[5]={'\t','\t','\t','\t','\0');
这里不要忘记为最后的,'\0'分配空间。如果要初始化一个字符串"hello",那为它定义的数组至少有6个数组元素。
例如,下面的代码给数组初始化,但会引起不可预料的错误:
char array[5]="hello";
该代码不会引起编译错误,但由于改写了数组空间以外的内存单元,所以是危险的。
(1) char a[10]="";
(2) char a[10]={'\0'};
(3) char a[10]; str[0]='\0';
第1,2种方式是将a数组的所有元素都初始化为'\0',而第3种方式是只将str数组的第一个元素初始化为'\0'。如果数组的size非常大,那么前两种方式将会造成很大的开销。
所以,除非必要(即我们需要将str数组的所有元素都初始化为0的情况),我们都应该选用第3种方式来初始化字符串数组。
几个错误的实例
int arrayl[5]={1,2,3,4,5,6}; //error-初始化值个数多于数组元素个数2 int array2[5]={1,,2,3,4}; //error:初始化值不能省略
3 int array3[5]={1,2,3,}; //error:初始化值不能省略
4 int array4[5]={}; //error:语法格式错误
初始化值的个数可少于数组元素个数。当初始化值的个数少于数组元素个数时,前面的按序初始化相应值, 后面的初始化为0(全局或静态数组)或为不确定值(局部数组)。
2.初始化字符数组
初始化字符数组有两种方法,一种是:
char array[10]={"hello"};
另一种是:
char array[10]={'h','e','l','l','\0'};
第一种方法用途较广,初始化时,系统自动在数组没有填值的位置用,'\0'补上。另外, 这种方法中的花括号可以省略,即能表示成:
char array[10]="hello";
第二种方法一次一个元素地初始化数组,如同初始化整型数组。这种方法通常用于输入不容易在键盘上生成的那些不可见字符。
例如,下面的代码中初始化值为若干制表符:
char chArray[5]={'\t','\t','\t','\t','\0');
这里不要忘记为最后的,'\0'分配空间。如果要初始化一个字符串"hello",那为它定义的数组至少有6个数组元素。
例如,下面的代码给数组初始化,但会引起不可预料的错误:
char array[5]="hello";
该代码不会引起编译错误,但由于改写了数组空间以外的内存单元,所以是危险的。
相关文章推荐
- 关于字符指针和字符数组初始化的问题
- 字符数组、字符串的声明及初始化问题
- 字符数组初始化需要注意的问题
- 字符数组中关于strlen的问题(未初始化)
- c++字符数组未初始化及初始化后元素内容及其'\0'问题解析
- C语言中字符数组和字符串定义和初始化的问题
- 字符数组初始化问题
- C语言指针问题,初始化,赋值,以及字符数组,字符串常量等问题
- Q14 密码问题 字符数组初始化memset
- VC++下一个看似简单实则很有“内涵”的C/C++字符数组初始化问题
- 关于字符数组的初始化
- 字符串数组的初始化问题
- C 语言字符数组的定义与初始化
- OJ平台中的一个数组初始化问题
- 字符数组初始化
- 奇怪的字符数组初始化
- 关于strlen 和 wstlen_s 操作未初始化的字符数组
- char 数组的初始化问题
- [C/C++]_[初级]_[关于数组的初始化问题]
- 关于字符串与字符数组的一些小问题