strcpy函数赋值时遇到问题

问题描述

strcpy函数赋值时遇到问题

char string[7];

char* str1 = "0123456789";

printf("%s",strcpy( string, str1 ));

为什么数组string的空间小于 字符串“0123456789”,但是依然输出0123456789;
还有strcpy函数是以什么方式进行赋值的?

解决方案

(1)在运行该代码时,提示Debug Error:Run-Time Check Failure #2 - Stack around the variable 'string' was corrupted.即栈区损坏。
(2)
char *strcpy(
char *strDestination, //目标字符串。
const char *strSource //null 终止的源字符串。
);

strcpy( )是char *类型,接受两个字符串指针参数, 返回的是第一个参数的值,即一个字符的地址。strcpy( )复制 strSource,包括终止 null 字符,按 strDestination指定的位置。 如果源页和目标字符串重叠,strcpy 行为不确定。由于 strcpy 不检查在 strDestination中是否有足够的空间,所以可能会产生缓冲区溢出的问题。

解决方案二:

strcpy函数内部无法进行越界检查,它一个字符一个字符复制,直到遇到str1的''结束符。

时间: 2024-08-22 04:06:31

strcpy函数赋值时遇到问题的相关文章

for-关于 += 在被调用函数中时的问题。

问题描述 关于 += 在被调用函数中时的问题. int add(int a){int b = 0: b += 1;}int main (void){int a =0;int i = 0;for(i = 0;i<= 5;i++){printf(""%dn""add(a));}return 0;}如果通过循环调用函数的话, b += 1;怎么进行赋值? 解决方案 使用指针或引用都可以达到要求,一般教科书上会使用指针. void add(int *a){ *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函数原型跪求答案

问题描述 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

求前辈们指点-一个关于VC6下strcpy函数的问题

问题描述 一个关于VC6下strcpy函数的问题 #include using namespace std; #include void main() { int b,b1,b2; char p2[4]; char p[3]={"dsfs","jasa","ussg"}; int a1=1,a2=1; strcpy(p2,(p+a1));//同下 strcpy(*(p+a1),*(p+a2));//为什么运行这句会出现运行停止 strcpy(*(

为什么malloc函数free时出错

问题描述 为什么malloc函数free时出错 菜鸟求解答 好像是什么越界使用了申请内存,还有为什么指针指向NULL后还是显示错误的指针 代码 #include #include #define NULL 0 using namespace std; int main(void) { int N; cout<<"请输入将要输入的字符串个数"< scanf("%d",&N); char **p=(char **)malloc(sizeof(c

C++中strcpy函数的实现_C 语言

我们先来看个例子 char * strcpy(char * strDest,const char * strSrc) { if ((NULL==strDest) || (NULL==strSrc)) throw "Invalid argument(s)"; char * strDestCopy = strDest; while ((*strDestCopy++ = *strSrc++) != '\0'); return strDest; } 突然想到之前做过的一个试题 题目:    

详解C语言中strcpy()函数与strncpy()函数的使用_C 语言

C语言strcpy()函数:复制字符串 头文件:#include <string.h> 定义函数: char *strcpy(char *dest, const char *src); 函数说明:strcpy()会将参数src 字符串拷贝至参数dest 所指的地址. 返回值:返回参数dest 的字符串起始地址. 附加说明:如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代. 范例 #i

strcpy函数的实现【转】

  转自:http://www.cnblogs.com/chenyg32/p/3739564.html 已知strcpy函数的原型是: char *strcpy(char *dst, const char *src); 实现strcpy函数 解释为什么要返回char * 假如考虑dst和src内存重叠的情况,strcpy该怎么实现   1.strcpy的实现代码 char * strcpy(char *dst,const char *src) //[1] { assert(dst != NULL