您好,输出结果为“a2yz”。
程序:
分析:
strcpy(a+1,b+2)相当于将a[1]及它后面的内容复制为b[2]及它后面的内容。b[2]及后面为“2”,因此复制后a为“a2”;
strcat(a,c+1)相当于在a的末尾加上c[1]及其后面的部分,也就是“yz”。故运行后a为“a2yz”
:
strcpy把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间,返回值的类型为char。
strcat把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除dest原来末尾的“\0”)。
参考资料:
答案是字符串拷贝函数会自动在目标串的后面加上结束标志'\0',也就是说所有的字符串 *** 作都会在遇到'\0'时结束,字符串输出时也一样,所以,内存中假如str1是Realmadrid,str2是Milan,那么最后p1里会变成Milan'\0'drid,这就实现了最后p1里是Milan'\0'drid,p2里是Realmadrid,输出时到'\0'结束,所有不会出错,但内存值如上,'\0'后面的不会被访问,即相当于p1是Milan。
strcpy是一个C语言的标准库函数,是string copy(字符串复制)的缩写。strcpy函数的作用是把含有'\0'结束符的字符串复制到另一个地址空间,返回值的类型为char。
扩展资料:
C语言中,strcpy 函数不对数组边界进行检查,因而在使用 strcpy 函数时,应注意以下两点:
一、strcpy函数的缓冲区溢出问题
C 库函数 char strcpy(char dest, const char src) 把 src 所指向的字符串复制到 dest。需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。
二、strcpy函数的安全机制
在编写 strcpy 函数时,首先尽量使目的缓冲区长度足够长,另外要检测目的缓冲区和源缓冲区。如果目的缓冲区或源缓冲区是空,就要在异常处理中结束程序。如果源字符串比目的缓冲区长度不长,也要在异常处理中结束程序,以防止出现溢出情况。
参考资料:
strcpy为字符窜复制函数,其一般形式为strcpy(字符数组1,字符窜2),作用是将字符窜2复制到字符数组1中,字符数组1必须定义足够大,“字符数组1”必须写成数组名形式。
例如 char str1[10],str2[]="china";
strcpy(str1,str2);
strcpy(char , char )函数表示将第二个参数开始的字符串拷贝到第一个参数的字符串位置。故strcpy (a+1, b+2) 表示将b[2]开始的字符串复制到a[1]开始的字符串中,即a数组变为“a2”。
strcat(char , char )函数表示将第二个参数开始的字符串接到第一个参数开始的字符串上,返回第一个字符串的指针。故strcat(a,c+1)表示将c[1]开始的字符串接到“a2”后面,a数组变成“a2yz”。
最后用puts输出字符串。
选B
strcpy(char
dst,char
src)的功能是将src字符串复制到dst内,并在最后加'\0'。
str1[]的长度为7,内容为"string\0"。
str2[5]的长度为5,内容未知。
"HELLO"的长度为6,内容其实为"HELLO\0"
显然,str2不够长,而str1可以。
#include <iostream>
#include <string>
int main()
{
char name1[20] = "吃了没?世界";
std::string name2 = "吃了" ;
strcpy_s(name1, name2size()+1, name2c_str());//这个改成name2c_str(),name2是string类型,不是char
std::cout << name1 << std::endl;
std::cinget();
return 0;
}
扩展资料:
strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。
strcpy_s 一般使用三个参数
errno_t strcpy_s(
char strDestination,
size_t numberOfElements,
const char strSource
);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)