首页 > 编程知识 正文

字符串的初始化,字符数组初始化的三种方式

时间:2023-05-04 13:56:22 阅读:168073 作者:2058

先上传代码:

#includestdio.hint main () char*S1=(char* ) ' aaaaa '; //char * s2={'b '、' b '、' b '、' b '、' b '、' b '、' b '、' b'}; //[ error ] scalar object ' S2 ' requiresoneelementinitializerchars3[ ]=' cccccc '; //char s4[5]='ddddd '; //[ error ] initializer-stringforarrayofcharsistoolong [-fpermissive ] chars4[5]=' dddd '; char s5[]={ 'e ',' e ',' e ',' e ',' e ',' e ',' e' }; char s6[5]={ 'f '、' f '、' f '、' f '、' f '、' f '、' f' }; printf(%s(n ),s1 ); printf(%s(n ),s3 ); printf(%s(n ),s4 ); printf(%s(n ),s5 ); printf(%s(n ),s6 ); for(intI=0; Isizeof(S1 ) 1; I//其中sizeof(s1 )=4。 s1是char *类型,因此size始终为4。 不能打印整个字符串。 printf(%d.%c(t ),I,s1[i]; 打印((n ); for(intI=0; Isizeof(S3 ) 1; I ) printf('%d.%c(t ),I,s3[i]; 打印((n ); for(intI=0; Isizeof(S4 ) 1; I ) printf((%d.%c ) t ),I,S4(I ); 打印((n ); for(intI=0; Isizeof(S5 ) 1; I ) printf((%d.%c ) t ),I,S5 ); 打印((n ); for(intI=0; Isizeof(S6 ) 1; I ) printf('%d.%c(t ),I,S6 ) I ); )其中char*s1=(char* )“aaaaa”; 在某些编译器中,如果不强制转换,只有warning不会报告错误。

输出的字符串如下所示。

正在调试:

s1内存中:

“aaaaa”是字符串常量,被分配给静态区域,发现s1存储器地址与s3、s4、s5、s6没有太大变化),强制进行类型转换,代入s1。

s3内存中:

s3实际长度为6,末尾自动添加了“ 0”。

s4内存中:

s5内存中:

s6内存中:

可以看到:五个字符串中,后两个字符串输出异常,对应其在内存中的情况不难发现后两个字符串在内存中结尾并没有’’,即0x00。因而无法识别其结尾而打印出无效内容。

用文字打印五个字符串。 打印的长度只比字符串的长度长1

s1实际长度为6;

此外,s5、s6字符串被指定为字符,并不是自动在末尾添加“ 0”。

二维字符数组、二维字符串数组初始化

char s7[][4]={ 'aaa '、' bbb '、' ccc '、' ddd' }; //数组的第二维为4,因此删除缺省情况下添加到字符串末尾的“0”字符,并确保在赋值时每个字符串的长度不超过4-1。 如果长度小于3,则所有填充的空闲部分似乎都是“”。 char s8[][4]={'a '、' a '、' a '、' '、' b '、' b '、' '、' c '、' c '、'、'、//作为字符否则,无法将行作为字符串打印。 char *s9[3]={'aaaaa '、' bbbb '、' ccc'};//包含3个要素的指针数组:各数组要素是指向字符串常数的指针。 此字符串常数的长度是任意的。 char * 每个数组元素是一个指向字符串常量的指针。 printf(%s(n ),s7[0]; printf(%s(n ),s8[1]; printf(%s(n ),s9[2] ); printf(%s(n ),s10(0) [1]; 【有些编译器因为将const char *型代入char *型变量而直接报告错误】

【数组的第一维大小可以是默认大小。 默认情况下,s8的赋值方式需要保证每行的元素数相等,包括4(0)】

打印结果:

aaa

bbb

中央电视台

qwer

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。