c语言中读取字符串,c++字符串读取
Charstr []={v , v , c , a , \ 0 };字符串最好存储在char数组中。将一个值为0的字符(称为空字符)添加到字符串文字量的末尾。由八进制转义字符表示的空字符是“\ 0”。如果表示为整数常量,则为0。结尾的空字符“\ 0”是字符串结尾的“符号”。注意:
由5个字符组成的文字字符串“VVcat”实际上占用了6个字符的内存空间。文字字符串中间也可以有一个空字符。但是,要注意区分。字面意思“ABC”是字符串,而字面意思“VV\0cat”不是字符串。#包含stdio.h
int nbsp。主要(无效){
printf(quot;sizeof(\ quot;vvcat \ quot)nbspnbsp=nbsp% u \ n quot,nbsp。nbspnbspnbsp(无符号)sizeof(quot;vvcat quot));
printf(quot;sizeof(\ quot;vv \ 0cat \ quot)nbspnbsp=nbsp% u \ n quot,nbsp。nbspnbspnbsp(无符号)sizeof(quot;vv \ 0cat quot));
}运行结果:
字符数组的初始化下面三种形式可以实现字符数组的初始化和赋值。1.nbspchar nbsp。str[] nbsp。=nbsp{ #39;V # 39,nbsp。#39;V # 39,nbsp。#39;c# 39;nbsp。#39;a # 39,nbsp。#39;t # 39,nbsp。#39;\0 #39;};
2.nbspchar nbsp。str[] nbsp。=nbspquotVVcat quot;
3.nbspchar nbsp。str[] nbsp。=nbspnbsp{ quotVVcat quot};因为初始值的个数决定了数组元素的个数,所以元素个数可以省略。
除了初始化赋值时,数组的初始值或字符串不能直接赋给数组变量。
以下三种是错误的赋值方法:char nbspstr[6];
1.nbspstr nbsp。=nbsp{ #39;V # 39,nbsp。#39;V # 39,nbsp。#39;c# 39;nbsp。#39;a # 39,nbsp。#39;t # 39,nbsp。#39;\0 #39;};
2.nbspstr nbsp。=nbspquotVVcat quot;
3.nbspstr nbsp。=nbspnbsp{ quotVVcat quot};如果如下声明,则不会在末尾添加空字符。
char str[]={V , V , c , a , t };
以这种方式声明的变量将不会被视为一个字符串,而是一组五个字符,即一个“普通”的数组。正确的分配方法:
#包含stdio.h
int nbsp。主要(无效){
char nbsp。str[6];
str[0] nbsp。=nbsp#39;V # 39;
str[1] nbsp。=nbsp#39;V # 39;
str[2] nbsp。=nbsp#39;c# 39;
str[3] nbsp。=nbsp#39;A # 39;
str[4] nbsp。=nbsp#39;T # 39;
str[5] nbsp。=nbsp#39;\0 #39;
printf(quot;字符串nbspstr nbsp。对于nbsp\ quot% s \ quot。nbsp\ n quot,nbsp。str);
返回nbsp。0;
}运行结果:
虽然数据长度定义为6,但除了空字符,只能存储5个字符。
注意:
如果将 \ 0 放在数组中间的某个位置,将出现以下结果:
#包含stdio.h
int nbsp。主要(无效){
char nbsp。str[6];
str[0] nbsp。=nbsp#39;V # 39;
str[1] nbsp。=nbsp#39;V # 39;
str[2] nbsp。=nbsp#39;\0 #39;nbspnbspnbsp//将“\0”放在下标3的位置
str[3] nbsp。=nbsp#39;c# 39;
str[4] nbsp。=nbsp#39;A # 39;
str[5] nbsp。=nbsp#39;T # 39;
printf(quot;字符串nbspstr nbsp。对于nbsp\ quot% s \ quot。nbsp\ n quot,nbsp。str);
返回nbsp。0;
}运行结果:
空字符 \ 0 是字符串结尾的“符号”。
空字符串charname[]=“”;
chars[]={ \ 0 };没有字符的字符串称为空字符串。内存空间中只有一个空字符,因为即使没有字符,也需要一个空字符来表示结束。
#包含stdio.h
int nbsp。主要(无效){
char nbsp。name[] nbsp。=nbspquotquot;nbsp//初始化数组
char nbsp。s[] nbsp。=nbsp{ #39;\0 #39;};
printf(quot;(无符号)sizeof(name) nbsp。=nbsp% u \ n quot,nbsp。(无符号)sizeof(name));
printf(quot;(无符号)sizeof nbsp。=nbsp% u \ n quot,nbsp。(无符号)sizeof(s));
printf(quot;请输入名字:quot);
scanf(quot;% s quot,nbsp。姓名);nbspnbsp//不需要添加
printf(quot;早上好,nbsp% s nbsp!\ n quot,nbsp。姓名);
printf(quot;午安,nbsp% 3s nbsp!\ n quot,nbsp。姓名);
printf(quot;晚上好,nbsp% .3s nbsp!\ n quot,nbsp。姓名);
printf(quot;夜晚,nbsp% 8s nbsp!\ n quot,nbsp。姓名);
printf(quot;该睡觉了,nbsp%-8s nbsp;\ n quot,nbsp。姓名);
返回nbsp。0;
}运行结果:
为了从标准输入中读取字符串,需要将scanf函数的转换描述设置为%s,并且还必须传入数组名。
此外,当scanf函数将从键盘读取的字符串存储到数组中时,它会在末尾添加一个空字符。
总结:1。%3s的最小输出宽度意味着至少输出3个实际数字。如果省略或实际输出的字符串中的位数超过指定值,将按照实际位数输出。如果设置了-标志,则表示左对齐;否则表示右对齐(空格填充)。2.精度%.3s指定显示位数的上限为3(即不能显示超过指定位数的字符,超过指定位数的字符会被截断)。3.转换说明符s指示输出字符串。也就是说,输出数组的字符,直到空字符的前一个字符。如果未指定精度或精度大于数据长度,则数组必须包含空字符。
转载请联系作者授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。