c风格字符串末尾没有'\0'引起的错误
2016-07-23 11:20
453 查看
#include <iostream>
using namespace std;
class Student
{
public:
Student() : id(0) {}
public:
int id;
char name[3];
char cellphone[6];
};
int main()
{
Student record;
cout << sizeof(Student) << endl;//字节为16,为何不是13(自己去搜索结构体字节对齐)
record.id = 201501;
//record.name = "qqr";这样赋值是错的,因为name是常量指针,不能做做左值
strcpy(record.name, "qqr");//record.name这个字符串被赋值之后没有结束符,会出现什么情况?往下看
strcpy(record.cellphone, "1234");
printf("id: %d\n",record.id);
printf("name: %s\n", record.name);
printf("cellPhone: %s\n", record.cellphone);
return 0;
}
运行结果:
16
id: 201501
name: qqr1234
cellPhone: 1234
请按任意键继续. . .
问题:name我赋值为了“qqr”,为什么打印出来变成了qqr1234,那就是因为缺少‘\0’造成的。
我们可以把record这个结构体先写入到文件中,再使用ultraEdit打开:
00000000h: 1D 13 03 00 71 71 72 31 32 33 34 00 30 32 A5 6B
1D 13 03 00 代表id:201501
71 71 72 代表qqr,但由于后面没有00,则会把31 32 33 34也会计入到name里面输出
31 32 33 34 00 30代表cellphone:1234,30是垃圾字符
32 A5 6B就是上面多出的三个字节,由编译器自动填充,实现字节对齐
using namespace std;
class Student
{
public:
Student() : id(0) {}
public:
int id;
char name[3];
char cellphone[6];
};
int main()
{
Student record;
cout << sizeof(Student) << endl;//字节为16,为何不是13(自己去搜索结构体字节对齐)
record.id = 201501;
//record.name = "qqr";这样赋值是错的,因为name是常量指针,不能做做左值
strcpy(record.name, "qqr");//record.name这个字符串被赋值之后没有结束符,会出现什么情况?往下看
strcpy(record.cellphone, "1234");
printf("id: %d\n",record.id);
printf("name: %s\n", record.name);
printf("cellPhone: %s\n", record.cellphone);
return 0;
}
运行结果:
16
id: 201501
name: qqr1234
cellPhone: 1234
请按任意键继续. . .
问题:name我赋值为了“qqr”,为什么打印出来变成了qqr1234,那就是因为缺少‘\0’造成的。
我们可以把record这个结构体先写入到文件中,再使用ultraEdit打开:
00000000h: 1D 13 03 00 71 71 72 31 32 33 34 00 30 32 A5 6B
1D 13 03 00 代表id:201501
71 71 72 代表qqr,但由于后面没有00,则会把31 32 33 34也会计入到name里面输出
31 32 33 34 00 30代表cellphone:1234,30是垃圾字符
32 A5 6B就是上面多出的三个字节,由编译器自动填充,实现字节对齐
相关文章推荐
- SDUT2121数据结构实验之链表六:有序链表的建立
- error: Setup script exited with error: command 'gcc' failed with exit status 1
- BFC
- 队列
- kvm安装配置(二)
- 自定义View 获取焦点
- Python_进程、线程及协程
- C中的volatile用法[转载]
- 在ubuntu下如何搜索文件?
- 关于文本左,右外边距是对齐方式text-align:justify
- intellij idea如何打包war文件
- zz J2EE高手眼里的OSGi
- SDUT 3373 数据结构实验之查找一:二叉排序树
- Hello Python
- poj1182(食物链)----带权并查集
- Stage1--Python的特点和安装
- python_Memcached
- Stage1--Python的特点和安装
- linux笔记:文件系统管理-分区、文件系统以及文件系统常用命令
- 安卓Android studio导入Github中的项目