字符数组的输出问题
2013-11-05 00:02
253 查看
[cpp] view
plaincopy
#include <stdio.h>
int main(void)
{
int i;
char s[3] = "abc";
for (i = 0; i < 3; i++)
{
printf("%c", s[i]);
}
printf("\n");
printf("%s\n", s);
return 0;
}
输出:
abc
abc烫烫烫烫?
两种打印数组的方法,打印出为什么不同?
问题出在了对字符串 和 字符数组两个定义的混淆。
字符串:一串以'\0'结尾的字符在C语言中被看作字符串,
用双引号括起的一串字符是字符串常量,C语言自动为其添加'\0'终结符
并且,c语言中没有为字符串专门的提供表示法,完全使用字符数组和字符指针来处理。
字符数组: 每个元素都是字符类型的数组。
比如:
char s[5] = "hello";
char s[6] = "hello"
使用 printf("%s",s)语句打印出来,完全是不一样的。s[5]中最后一个字符为字母o 而 s[6]中 为\0 所以,s[6]被当做一个完整的字符串。而s[5]因为不是以\0结尾,所以,编译器自动寻找下一个存储空间,知道找到\0为止。这也解释了上面第二种方法会打印出“烫烫烫烫?”来。
plaincopy
#include <stdio.h>
int main(void)
{
int i;
char s[3] = "abc";
for (i = 0; i < 3; i++)
{
printf("%c", s[i]);
}
printf("\n");
printf("%s\n", s);
return 0;
}
输出:
abc
abc烫烫烫烫?
两种打印数组的方法,打印出为什么不同?
问题出在了对字符串 和 字符数组两个定义的混淆。
字符串:一串以'\0'结尾的字符在C语言中被看作字符串,
用双引号括起的一串字符是字符串常量,C语言自动为其添加'\0'终结符
并且,c语言中没有为字符串专门的提供表示法,完全使用字符数组和字符指针来处理。
字符数组: 每个元素都是字符类型的数组。
比如:
char s[5] = "hello";
char s[6] = "hello"
使用 printf("%s",s)语句打印出来,完全是不一样的。s[5]中最后一个字符为字母o 而 s[6]中 为\0 所以,s[6]被当做一个完整的字符串。而s[5]因为不是以\0结尾,所以,编译器自动寻找下一个存储空间,知道找到\0为止。这也解释了上面第二种方法会打印出“烫烫烫烫?”来。
相关文章推荐
- 字符数组输出的问题
- 字符数组使用问题
- C下二维字符指针数组的输出
- C语言结构体中字符数组的问题
- JavaSE-JPasswordField 中得到的字符数组转化为字符串(密码乱码问题)
- 线程按指定顺序输出字符到数组的实例代码
- C常见问题之字符串数组和字符指针数组问题
- Q14 密码问题 字符数组初始化memset
- Code::Blocks 中文字符输出乱码的问题求解?
- 定义一个结构体变量(包括年、月、日),编写程序,要求输入年月日,程序能够计算并输出改日是本年中的第几天。注意闰年问题。(数组)
- c++字符数组未初始化及初始化后元素内容及其'\0'问题解析
- hdu_1048_The Hardest Problem Ever_字符输入输出问题水题一道
- JPasswordField 中得到的字符数组转化为字符串(密码乱码问题)
- C++字符数组的输入输出和字符串结束标志使用讲解
- 关于函数字符数组调用的问题(没有搞清指针的概念)
- 字符串指针与字符数组区别(二)--字符串输出与指针的相加减
- 字符串替换空格: 请实现一个函数,把字符数组中的每个空格替换成“%20”。 例如输入“we are happy.”,则输出“we are happy.”
- 字符数组初始化问题
- 数组中字符出现的次数问题
- 关于数组与指针的输出问题