腾讯QQ2008年笔试题中的附加题(30分)
//腾讯QQ2008年笔试题中的附加题(30分)
//从程序健壮性进行分析,下面的FillUserInfo函数和main函数分别
//存在什么问题?#include <iostream>
#include <string>
#include <memory>#define MAX_NAME_LEN 20struct USERINFO
{int nAge;char szName[MAX_NAME_LEN];
};void FillUserInfo(USERINFO* parUserInfo)
{std::cout<<"请输入用户的个数:";int nCount=0;std::cin>>nCount;for(int i=0;i<nCount;i++){std::cout<<"请输入年龄:";//原先是这样的//std::cin>>parUserInfo[i]->nAgestd::cin>>parUserInfo[i].nAge;std::string strName;std::cout<<"请输入姓名:";std::cin>>strName;strcpy(parUserInfo[i].szName,strName.c_str());}
}int main(int argc,char* argv[])
{//USERINFO arUserInfos[2]={0};USERINFO arUserInfos[2];ZeroMemory(arUserInfos, sizeof(arUserInfos));FillUserInfo(arUserInfos);printf("The first name is:");printf(arUserInfos[0].szName);printf("\n");return 0;
}//********************************************************************
// 百度知道上某牛人给的解答:
// 1:函数入口未验证.要防止FillUserInfo(USERINFO* parUserInfo)的
// 参数指针是【非法指针】。
// 入口验证可以这样写:ASSERT(parUserInfo);
// 或:
// if(parUserInfo == NULL){return;}
// 2:从设计的角度来说,把数据长度的限定和数据传递值分开是非常危险的。
// 比如FillUserInfo(USERINFO* parUserInfo)我传了USERINFO arUserInfos[100]
// 进去,里面输入nCount的时候我输入101呢?一般来说应该FillUserInfo(USERINFO*
// parUserInfo,int nSize);传入一个需要赋值的长度参数.而且你在函数里面也无法
// 计算parUserInfo的长度.
// 3:将std::string赋值给【C风格字符串】是十分危险的。string是动态开辟内存,
// 【长度是无限的】。如果超过C风格数组的长度即MAX_NAME_LEN很容易造成栈溢出
// 或内存访问崩溃。如需这样用.请用strncpy(parUserInfo[i].szName,strName.c_str(),20);
// 4:一个细节.for(int i=0;i<nCount;i++)
// 虽然C++支持定义时使用,但不建议这么写。不同版本的编译器对此理解不同,不利于
// 扩展和向上升级。微软建议还是用
// int i = 0 ;
// for(i=0;i<nCount;++i)
// 5:USERINFO arUserInfos[100]={0};结构体赋值不建议这么做。
// 有两种推荐的安全做法
// 1--构造函数初始化.
// 2--ZeroMemory(arUserInfos,sizeof(arUserInfos)); 调用memset置零
// 6:混用printf和cout,cin也是不好的,虽然不会有危险,但是其使用不同的缓冲流可能
// 存在输出顺序混乱的问题
//************************************************************************//************************************************************************
// 【关于c_str()函数的学习】
// 1,C语言中没有string类型,C++中为了与C语言兼容,使用string类对象的
// 成员函数c_str()把string对象转换成C中的字符串样式
// 注意:一定要使用strcpy()函数等操作c_str()返回的指针
// 原因:c_str函数的返回值是const char *的,不能直接赋值给char *
// 包含的头文件:<cstring>
// 2,最好不要这样写:
// char *c;
// string s = "1234";
// c = s.c_str();
//
//************************************************************************
腾讯QQ2008年笔试题中的附加题(30分)相关推荐
- 最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析
最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析 8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的 i .每次从通里面拿 ...
- 百度 阿里 华为 腾讯 谷歌面试笔试题及解析
8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的 i .每次从通里面拿出来两个球: ii.如果取出的是两 ...
- 【转】2014百度 阿里 华为 腾讯 谷歌面试笔试题及解析
原文: http://www.cnblogs.com/JuneWang/p/3773880.html 已知memcpy的函数为: void* memcpy(void *dest , const voi ...
- 最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析 (转)
原文地址:http://m.blog.csdn.net/blog/panfengyun12345/12618453 8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有 ...
- 2022腾讯前端实习生笔试题与部分详细题解
2022腾讯前端实习生笔试题与部分详细题解 前言与详细题目和个人题解 一.根据给定深度实现数组的扁平化 二.股票买入卖出收益最大化 欢迎交流和指正 前言与详细题目和个人题解 4月24晚举行的笔试,我做 ...
- 2016百度春招笔试题(高中熟悉的题现在却变得陌生)
一.前言 前几个星期的面试题都有点稀奇古怪,这个星期来一个正常点的题目,可是这题目可能对于个别人来说是如此的熟悉但又很陌生.因为那是我们高中时常做的题目,现在却还给老师了.那让我们好好回忆一下. 二. ...
- 腾讯校园招聘会笔试题 难题解析
1. 数据存储在磁盘上的排列方式会影响I/O服务的性能,一个圆环的磁道上有10个物理块,10个数据记录R1------R10存放在这个磁道上,记录的安排顺序如下表所示: 物理块 1 2 3 4 5 6 ...
- 牛客 腾讯算法岗 笔试题整理
牛客腾讯笔试题真题题解 格雷码 # -*- coding:utf-8 -*-class GrayCode:def getGray(self, n):GrayList = []tmp_list_0, t ...
- 史上最细的FIFO最小深度计算,(大多数笔试题中都会涉及)
转载地址:https://www.cnblogs.com/dxs959229640/p/8144656.html 作者:星雨夜澈 出处:http://www.cnblogs.com/dxs95922 ...
最新文章
- 【非专业评测】发蜡、发膏、发泥、发油、啫喱、发膜、发胶、干胶、发棒、摩丝
- Linux下nginx支持.htaccess文件实现伪静态的方法!
- Flutter GitHub Travis CI 搭建
- 正向代理反向代理 简(fu)明(za)解释
- MyEclipse6.0下代码提示(alt+/)无法使用的解决方法
- 惊了,电子元件还能这样玩?这是电子器件的艺术魅力
- [FY20 创新人才班 ASE] 第 1 次作业成绩
- 苹果手机屏幕镜像搜索不到电视_最全小米电视投屏教程(建议收藏)
- 安装Whl文件时提示 ....whl is not a valid wheel filename
- Hadoop三大发行版本简单介绍
- 红宝书考研单词(四级到考研和六级的过渡词汇)
- Kubernetes:应用部署、应用了解、应用公布、应用伸缩,-image=ikubernetes/myapp:v1
- 贵金属行情价格走势图,香港十大杰出贵金属交易平台排名2023
- 使用超声波测距模块控制LED灯
- elo算法c语言,王者荣耀Elo机制?你中招了吗?
- Vue3在当前h5界面禁用移动端物理返回键代码
- Android 10 设置壁纸流程
- Clark变化和Park变换
- Win7只能安装Office2016,OfficeTool安装的2019疑似2016
- 迅雷看看免费高清影视 v4.9.15.2156 绿色免费版