vc 中用strcpy函数遇到的问题

问题描述

vc 中用strcpy函数遇到的问题

小弟我在做strcpy函数的测试,代码如下
char pContent[20];
CString str = "qwertyuiopasdfghjklzxcvbnm1312311111111111111111111111111111111111111111111111111";
strcpy(pContent,str);
AfxMessageBox(pContent);

我很疑问,问啥我定义了长度给20的数组,str的长度明显是大于20的,为啥程序不会报错呢?编译环境为VC6.0。
请大神们解答一下

解决方案

因为strcpy不会对缓冲区是否越界做出检查。所以这样的代码照样可以编译运行,但是显然结果不可预料。
特别指出,strcpy不应该使用,应该用strncpy和strcpy_s代替。

解决方案二:

只是一个函数的问题strcpy

解决方案三:

 char * strcpy(char *dst,const char *src)   //[1]
{
    assert(dst != NULL && src != NULL);    //[2]

    char *ret = dst;  //[3]

    while ((*dst++=*src++)!=''); //[4]

    return ret;
}

strcpy的代码:
从实现代码上看, strcpy不会对缓冲区是否做越界处理, 在while ((*dst++=*src++)!='') 中是根据src的值来结束while循环, 并不去
检查src的长度大于dst的长度

解决方案四:

拷贝的字符串没有结束标志

时间: 2025-01-01 02:51:24

vc 中用strcpy函数遇到的问题的相关文章

c++-vc中用struct来将txt文件中的数据导入到数组中

问题描述 vc中用struct来将txt文件中的数据导入到数组中 我用的是struct来做的,但是显示的数据和原来数据不符,数据发生了变化,这是为什么?? 解决方案 是不是没有进行字节对其呢 如果没有字节对其 TA在解析的时候 可能会自动字节对齐了 解决方案二: 和struct没关系,你所谓的不一样:小数位数不一样.使用了科学计数法.列没对齐,都可以使用printf函数解决. cout默认输入当然不会给你做这些处理.

C语言中的strdup()函数和其与strcpy()函数的区别_C 语言

头文件: #include <string.h> 定义函数: char * strdup(const char *s); 函数说明:strdup()会先用maolloc()配置与参数s 字符串相同的空间大小,然后将参数s 字符串的内容复制到该内存地址,然后把该地址返回.该地址最后可以利用free()来释放. 返回值:返回一字符串指针,该指针指向复制后的新字符串地址.若返回NULL 表示内存不足. 范例 #include <string.h> main(){ char a[] = &

指针- C语言的strcpy函数 拷贝之后再打印

问题描述 C语言的strcpy函数 拷贝之后再打印 比如将s的内容复制到n char *s="hello world"; char *n; strcpy(n,s); 之后再打印n的内容,如果是printf("%s",n);的话 结果就是"hello world" 但是如果是逐个打印 for(int i=0;i<strlen(n);i++){ printf("%c",n[i]); } 运行时会出现Segmentation

指针地址-实现自己的strcpy函数是遇到的问题

问题描述 实现自己的strcpy函数是遇到的问题 最近在看 C和指针 在做第9章第3个编程题时,遇到了一个奇怪的问题,原题如下 编写一个名叫my_strcpy的函数,它类似于strcpy函数,但它不会溢出目标数组.复制的结果必须是一个真正的字符串. 我在centos上编写了程序: #include <stdio.h> char *my_strcpy(char *buff, const char *str, int buffLen) { char *temp = buff; while ((te

strcpy函数&amp;amp;#39;\0&amp;amp;#39; 要不要拷贝过去

问题描述 strcpy函数'' 要不要拷贝过去 char * CJStrCpy(char *pDest, const char *pSrc) { if(NULL != pDest && NULL != pSrc) { char *pTemp = pDest; while('' != *pSrc) { *pTemp++ = *pSrc++; } } return pDest; } 解决方案 C字符串结尾有'',所以是需要的. 解决方案二: 当然要,字符数组之所以能保存字符串,就是因为最后一个

strcpy函数赋值时遇到问题

问题描述 strcpy函数赋值时遇到问题 char string[7]; char* str1 = "0123456789"; printf("%s",strcpy( string, str1 )); 为什么数组string的空间小于 字符串"0123456789",但是依然输出0123456789: 还有strcpy函数是以什么方式进行赋值的? 解决方案 (1)在运行该代码时,提示Debug Error:Run-Time Check Failu

link中用什么函数可以同时抽取3个不同的记录并且显示出来?

问题描述 link中用什么函数可以同时抽取3个不同的记录并且显示出来? link中用什么函数可以同时抽取3个不同的记录并且显示出来? 解决方案 可以用take(3)取得3个,可以和排序一起使用.

c-C语言中用fgets()函数,输入过多会导致程序自动关闭!!

问题描述 C语言中用fgets()函数,输入过多会导致程序自动关闭!! 就是这个代码,只要输入的字符数量超过9,程序就自动关了. #include int main(void) { char name[10]; char name2[100]; char* c; c = fgets(name,9,stdin); // printf("%s%s",name,c); getchar(); getchar(); getchar(); return 0; } 解决方案 不是越界...fgets

strcpy函数原型跪求答案

问题描述 strcpy函数原型跪求答案 ⒈strcpy的实现代码 char * strcpy(char * strDest,const char * strSrc) { if ((NULL==strDest) || (NULL==strSrc)) //[1] throw "Invalid argument(s)"; //[2] char * strDestCopy = strDest; //[3] while ((*strDest++=*strSrc++)!=''); //[4] re