C语言 显示strcpy出错 求大神解释 编译器是vs2013

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 显示strcpy出错 求大神解释 编译器是vs2013相关的知识,希望对你有一定的参考价值。

#include "stdio.h"
#include "string.h"
main()

char str1[] = "what are";
char str2[] = "you doing?";
strcpy(str1, str2);
printf("%s \n",str1);


错误
错误 1 error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

是vs准备弃用strcpy的,安全性较低,所以微软提供了strcpy_s来代替,如果你想继续使用strcpy的,main前面加上#pragma warning(disable:4996)即可 参考技术A str1不够长,你设置跟str2一样长追问

str1[40]后仍然报错 还是一样错误

参考技术B 因为你定义的是两个字符串,第一个字符串比第二个要短,所以你这样copy会越界的。
VC6.0 不会检查,但是VS会进行检查的。

建议使用strncpy()函数,这样安全,但是不会全部copy进去。

或者你可以定义的时候str1[] str2[]都指定一下分配的空间,比如15.,str1[15] str2[15]这样

c语言。求大神帮做这个高大上的题QAQ

c语言。求大神帮做这个高大上的题QAQ客房管理
可以输入顾客信息、存盘、读盘、显示、修改、还可以订房、
客房类型表中包括类型ID,类型名称,客房价格,可超额定数,备注等。(下面的内容可以根据需要进行改进)。
字段名称 数据类型   
类型ID  数字   
客房状态 文本 (这里最好再做个结构体或者共用体,如果没有人入住,做好标
记,如果有 人入住,记好姓名等信息) 
类型名称  文本   
客房价格  数字  
客房ID  文本   
楼层编号 数字   
额定人数 数字   
固有床数 文本      
客房描述 文本    
备注 文本 
要完成功能:设计菜单能完成:1)输入客房信息。2)将客房进行分类存放,能保存在文件中。3)能从文件中提取信息。4)来客能根据客人要求分配客房。5)能进行显示、修改等操作。6)能预定客房。7)根据客人名字等信息可以进行查询等操作。能查询同类别客房。根据不同查询要求可以进行查询。8)对于使用情况可以根据入住率对客房进行排序。

#include#include#include// 用于使用网络顺序显示:htons#pragma comment(lib, "WS2_32.LIB")/************************************************************************** * 计算给定数据的校验和 * * 输入参数: * pBuffer 指向需要校验的数据缓冲区 * nSize 需要校验的数据的大小,以字节为单位 * * 返回值: * 16位的校验结果 * **************************************************************************/unsigned short checksum_calculating(unsigned short *pBuffer, int nSize) unsigned long dwCksum = 0; // 32位累加和 // 以两字节为单位反复累加 while (nSize > 1) dwCksum += *pBuffer++; nSize -= sizeof(unsigned short); // 如果总字节数为奇数则加上最后一个字节 if (nSize) dwCksum += *(unsigned char*) pBuffer; // 将32位累加和的高16位与低16位第一次相加 dwCksum = (dwCksum >> 16) + (dwCksum & 0xffff); // 将上一步可能产生的高16位进位再次与低16位累加 dwCksum += (dwCksum >> 16); // 返回16位校验和 return (unsigned short) (~dwCksum);int main(int argc, char * argv[]) unsigned char * pBuf; unsigned short wLen; // 创建输入文件流 指针 FILE *fInfile; // 创建输出文件流 FILE *fOutfile; // 判断输入的命令行格式是否正确 if (argc != 3) puts( "请按以下格式输入命令行: Checksum inputfile outputfile\n" ); return 1; // 以2进制方式打开指定的输入文件 fInfile = fopen(argv[1], "rb+"); // 把文件指针移到文件末尾 fseek(fInfile,0,SEEK_END); // 取得输入文件的长度 wLen = (unsigned short)ftell(fInfile); // 文件指针位置初始化 fseek(fInfile,0, SEEK_SET); // 定义数据报缓冲区,缓冲区大小为4+wLen ,其中4为数据报类型字段、长度字段 // 以及校验和字段的长度和,wLen为数据字段长度,即输入文件长度(以字节为单位) pBuf = (unsigned char*)malloc(4 + wLen); pBuf[0] = (unsigned char)(0xab); // 给数据报类型字段赋值 pBuf[1] = (unsigned char)(wLen); // 给数据报长度字段赋值 *(unsigned short *)(pBuf + 2) = 0; // 计算校验和之前,校验和字段先置为0 fread(pBuf+4,sizeof(char), wLen, fInfile); // 根据输入文件填充数据报的数据字段 // 计算校验和并把结果填入到数据报的校验和字段 *(unsigned short *)(pBuf+2) = checksum_calculating((unsigned short *)pBuf,4+wLen); // 屏幕输出校验和计算结果 printf("校验和为:0x%X (以网络顺序显示)\n" , htons( *(unsigned short *)(pBuf+2) )); // 以2进制方式打开输出文件 fOutfile= fopen(argv[2],"wb"); // 将pBuf中的数据报写入输出文件 fwrite((char *)pBuf, sizeof(char), wLen+4, fOutfile); //cout<< "数据报已成功保存在" << argv[2] << "文件中!" << endl; printf("数据报已成功保存在%s文件中!\n", argv[2]); free( pBuf); // 释放数据报缓冲区 fclose(fInfile); // 关闭输入文件流 fclose(fOutfile); // 关闭输出文件流 参考技术A 是啊

以上是关于C语言 显示strcpy出错 求大神解释 编译器是vs2013的主要内容,如果未能解决你的问题,请参考以下文章

我在linux中编译C语言为啥提示“隐式声明与内建函数‘strcpy’不兼容 ”?

C语言编程,求大神解释错误在哪?程序要求是:输入一个数,再输出比这个数大的第四个素数。附我的代码!

C语言程序编译以后一直显示stdio.h里报错,为啥,怎么修改?求大神!

求大神整理c语言指令符号及用法大全。

kali linux的gcc编译完的C语言小程序,为啥执行后显示段错误?求各位大神的说明或解决方法。

c语言用函数求最大值的程序出错,求解