//腾讯QQ2008年笔试题中的附加题(30分)
//从程序健壮性进行分析,下面的FillUserInfo函数和main函数分别
//存在什么问题?
#include <iostream>
#include <string>
#include <memory>
#define MAX_NAME_LEN 20
struct 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]->nAge
std::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();
//
//************************************************************************
相关推荐
蜗牛星际+OpenWrt实战:双网口变AP模式,让所有设备同网段互通
本文详细介绍了如何将蜗牛星际双网口小主机刷入OpenWrt系统,并将其配置为AP模式,实现与主路由同网段的无缝桥接。通过关闭DHCP、桥接物理网口等核心步骤,解决家庭网络设备割裂问题,让所有设备在同一局域网内高效互通,特别适合追求网络简洁和厌恶多级NAT的技术爱好者。
腾讯QQ2008年笔试题中的附加题(30分)
//腾讯QQ2008年笔试题中的附加题(30分) //从程序健壮性进行分析,下面的FillUserInfo函数和main函数分别 //存在什么问题? #include #include #include #define MAX_NAME_LEN 20 struct USERINFO { int nAge; char szName[MAX_NAME_LEN]; }; void Fi
R 绘制环形树状图
按大类小类的从属关系绘制环形图,并把不同值的节点设置为相应大小。要求同一类的节点应为同一颜色。 按照输入,处理代码和输出记录
软件构造相关五
一、健壮性和正确性的简单介绍 1.1Robustness 健壮性 1.1.1 定义:健壮性又称鲁棒性,是指软件对于规范要求以外的输入情况的处理能力。所谓健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。 简单来说就是系统在正常输入或不正常外部环境下仍能够表现正常的程度。 1.1.2面向健壮性编程的做法 处理未期望的行为和错误终止 即使终止执行,也要准确/...
博途S7-1200与昆仑通态MCGS纯仿真联调实战指南
本文详细介绍了博途S7-1200与昆仑通态MCGS纯仿真联调的实战指南,包括环境搭建、配置步骤、通信桥接及故障排除。通过TIA Portal和MCGS Pro搭建的仿真环境,可实现80%以上的基础功能验证,适用于工业自动化学习和开发,大幅降低硬件投入成本。
【CANoe16安装教程】亲测安装成功
CANoe16安装教程
软件质量测试中的健壮性测试是什么?一文和你说
在验证我们构建的计算机系统的健壮性时,无论编程语言的语义如何,尤其是当存在多个依赖项时,它都是必要的。一些健壮性测试解决方案提供自动生成测试用例,这些用例可以提高质量,并帮助在目标硬件上验证和验证软件组件,这是在最严格的安全完整性级别内的需求, 例如DO-178C过程标准中的DAL A。但即使取得了这样的成功,不幸的是也会有死亡、伤害和诉讼,但它为健壮性测试的有效性提供了一个有效的论据。我们用来测试质量和可靠性的流程之一被称为健壮性测试,即在存在异常输入或压力环境条件的情况下,系统正常运行的程度。
cartographer如何使用2个反光柱子作为一个landmark
2个反光柱的摆放要求:靠着墙摆,因为我们只能从一侧看到2个反光柱,从两侧都看到至少需要3个反光柱来定位。 landmark检测原理:因为我们是从一侧看到2个反光柱,所以看到2个反光柱在一帧激光数据中会有顺序,有2种情形,如下图 这两种情形,我们发现 情形1: 这种情形2个反光柱子被检测到的激光角度小于180,我们认为大一些激光角度的是原点。 情形2: 这种情形2个反光柱子被检测到的激光角度大于180,我们认为小一些激光角度的是原点。 这样原点就固定下来,并是唯一的。2个反光柱构成的坐标系也就确定了。和激光坐
#软件构造 健壮性与正确性
健壮性 健壮性:系统在不 正常输入或不正常外部环境下仍能够表现正常的程度 面向健壮性的编程: 处理未期望的行为和错误终止 即使终止执行,也要准确/无歧义的向用户展示全面的错误信息 错误信息有助于进行debug 健壮性法则 (Postel’s 准则) 对自己的代码要保守,对用户的行为要开放 封闭实现细节,限定 用户的恶意行为 考虑极端情况,没有“不可能” ...
5G射频设计中N77&N79的PRX为什么需要3个SRS
首先,我们来逐个拆解一下这个神秘的“
华为OD机试双机位C卷-恢复数字序列 (Py/Java/C/C++/Js/Go)
华为OD机试双机位C卷 恢复数字序列,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 恢复数字序列。
面向正确性和健壮性的软件构造
HIT SoftwareConstruction
Google 二次签名 导致 Facebook , Google 登录失败
google 授权登录
提升程序的健壮性
如何提升程序的健壮性,这一点在今天之前基本上没有考虑过,或者说考虑的很少。不过在刚才,查看Demo的时候发现,这些大佬写的代码,都会有意无意地考虑到程序的健壮性的问题。 那我就稍微整理一下常见的思路。 判误 这个比较容易理解,就是如果一个函数有参数,或者说是需要从其它地方得到值,那么会进行参数或者值得判误操作,判断该值是否满足我们的需要。 比如,文件的判空,数据的判正负,操作的判真等,这点也是...
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
深入理解程序的健壮性
1 问题程序健壮性是一个关键的软件质量属性,它涉及软件系统在面临各种异常情况时的表现。具体来说,健壮性是指软件对于规范要求以外的输入情况的处理能力。这包括了对错误输入、异常环境以及系统内部错误的响应和处理。2方法作用错误处理能力增强。用户体验提升。系统可靠性增强。维护性和可扩展性提升。降低维护成本。安全性提升。代码例子内容:通过输入来解释健壮性。代码清单1def add_numbers(a, b...
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
java程序的健壮性与正确性
java程序的健壮性与正确性
程序的健壮性与codereview
文章目录程序的健壮性与codereview一、正确性影响程序正确性的因素前置状态判定“受理—处理—关闭”模型“申请—审批—善后—完成”模型二、健壮性错误数据系统内部出现问题程序健壮性注意点三、方法总结四、code review1.代码规范:明确Coding规则2.功能文档编写3.review的范围与reviewer职能 程序的健壮性与codereview 功能分类:操作类,查询类 健壮性:尽量少的...
程序的健壮性Robustness
所谓的程序健壮性是指处理异常的能力,在异常中能够独立处理异常,并且把正确的答案输出。 例如: 有一个程序能够下载一个文件到指定的路径,但是这个路径是不存在的,因此程序必须要处理这个情况。 例1:下面的代码就没有很好的考虑到异常情况,如果service层出现某个异常,则返回给前端的值就为null 例2:下面的代码没有考虑到returnresult为null时,catch...
如何提高程序的健壮性,增加判断。
如果后台在返回的时候少了一个属性?前端会不会报错,这是我们前端开发一定会遇到的问题。那么如何的提高程序的健壮性呢。 关于这个问题,我们可以在实例化这个对象的时候进行判读来增加程序的健壮性。下面是一个参考示例。 public class ClientUser implements Parcelable { public static final Parcelable.Cre
提高程序健壮性的方法
占位
驱动程序的健壮性考虑
驱动程序的健壮性要考虑硬件出问题的时候不会导致内核的工作异常。比如驱动注册的时候要对硬件的识别,设备硬件是否存在或者硬件是否正常。如果硬件模块不正常,但是还要去注册,访问的时候会出现问题,如果处理不当会导致内核CRASH。比如一个I2c设备,硬件已经不正常,如果不加判断去继续注册,可能有些设备的资源出现空,上层通过API访问的时候可能出现空指针,导致系统重启。在注册驱动的开始要对硬件诊断,如果硬件
程序的健壮性和鲁棒性
一、健壮性 健壮性是指软件对于规范要求以外的输入情况的处理能力。 所谓健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。 另外健壮性有时也和容错性,可移植性,正确性有交叉的地方。 比如,一个软件可以从错误的输入推断出正确合理的输入,这属于容错性量度标准,但是也可以认为这个软件是健壮的。 一个软件可以正确地运行在不同环境下,...
《Effective Python》第十章 健壮性——使用 assert 和 raise 提升 Python 程序的健壮性
本文探讨Python中assert与raise的合理使用,强调二者本质区别:assert用于开发阶段验证内部假设,不应处理用户输入;raise是对外API的错误报告机制。通过评分系统案例展示了两种语句的不同应用场景,指出assert应验证函数参数和算法前提,而raise需定义清晰的自定义异常类。特别提醒不要在生产环境依赖assert检查用户输入,也不要捕获AssertionError以免掩盖问题。文章总结了正确使用这两个语句的原则,强调合理运用能提升代码健壮性和可维护性。
以血的教训来谈程序的健壮性&&练习3-3
首先请各位看下面这段代码: #include #define MAX 100 //limited of amount of array's element void Expand(char s1[], char s2[]); int main() { char string_origin[MAX]; char string_transformation[MAX]; int
C语言 函数——函数封装与程序的健壮性
检查入口参数的有效性、合法性。*存在死代码的原因何在?*检查函数调用成功与否。
962



被折叠的 条评论
为什么被折叠?



