社区
C语言
帖子详情
请问strcpy的两个参数可以是同一个地址么?
CodeMagic
2006-07-03 08:48:05
如题,有相关的函数说明的链接最好,我想知道一下
例如strcpy(str, str+3) 其中str为字符串,这样写是否可行
...全文
681
11
打赏
收藏
请问strcpy的两个参数可以是同一个地址么?
如题,有相关的函数说明的链接最好,我想知道一下 例如strcpy(str, str+3) 其中str为字符串,这样写是否可行
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zez
2006-07-04
打赏
举报
回复
这种问题
你自己为什么不试一下呢???
mLee79
2006-07-04
打赏
举报
回复
MSDN: The behavior of strcpy is undefined if the source and destination strings overlap.
后面往前面拷贝没问题, 跟 memcpy 一样 .....
jixingzhong
2006-07-04
打赏
举报
回复
strcpy的两个参数可以是同一个地址么
===================
这个应当是标准未定义行为, 结果可能不一定...
在C99 标准,对于指针,新增加一个 restrict 修饰符号,
该符号限制了指针对象访问方式,
在 memcpy 等函数参数中使用该修饰,
使得参数必须是不同的对象 ....
(也就是不能够是同一个对象 ...)
daisy122
2006-07-04
打赏
举报
回复
函数名: strcpy
功 能: 串拷贝
用 法: char *strcpy(char *str1, char *str2);
程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char string[10];
char *str1 = "abcdefghi";
strcpy(string, str1);
printf("%s\n", string);
return 0;
}
逍遥过客
2006-07-03
打赏
举报
回复
这是种很差的用法,不推荐使用!
CodeMagic
2006-07-03
打赏
举报
回复
不过程序没问题好像
哪里有标准c函数strcpy实现的英文说明,我想验证一下
用循环也可以实现,不知道循环的实现是从高位到低位遍历 还是反之
happytang
2006-07-03
打赏
举报
回复
可以,不过数据就被覆盖了,这样损害了原始数据
CodeMagic
2006-07-03
打赏
举报
回复
其实我想实现的是同一字符串中数据的移位操作,想知道strcpy的实现是否支持这样的操作。
Dong
2006-07-03
打赏
举报
回复
例如strcpy(str, str+3) 其中str为字符串,这样写是否可行
-----------------------------------
str可以是char str[..],因为可以是char* str = new char[..];,但就是不可以char* str = "....";
winks
2006-07-03
打赏
举报
回复
可以,只是不会有人这样用
tailzhou
2006-07-03
打赏
举报
回复
可以呀
#include "stdio.h"
#include "string.h"
int main()
{
char str[]="1234567890";
char *sp;
strcpy(str,str+3);
printf("%s",str);
return 0;
}
C:\projects>test
4567890
strcpy
_s不接受
两个
参数
的问题
char *p = new char[25];
strcpy
_s(p,20,“wenmingjie”);才能成功运行,而
strcpy
_s(p,“wenmingjie”)不能。 同理:strname = (char *)new char[strlen(str) + 1];
strcpy
_s(strname,strlen(str) + 1,str);也是正确的使用方法。 下面来自网络解释: 看名字明白...
strcpy
_s函数
两个
参数
和三个
参数
看名字明白,它和
strcpy
()函数的功能应该一样的。
strcpy
函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用
strcpy
_s就可以避免这些不可预料的行为。这个函数用
两个
参数
、三个
参数
都可以,只要可以保证缓冲区大小。三个
参数
时:errno_t
strcpy
_s(...
strcpy
_s的
两个
参数
与三个
参数
三个
参数
时: errno_t
strcpy
_s( char *strDestination, size_t numberOfElements, const char *strSource );
两个
参数
时: errno_t
strcpy
_s( char (&strDestination)[size], const char *strSource ); 使用3个
参数
的版本时,一般的做法就是将...
strcpy
_s不接受
两个
参数
String的实现
#include #include using namespace std; class String { public: //String(); //default constructor String(const char * str =NULL); //common constructor String(const String& another);
strncpy,
strcpy
,sprintf,snprintf
strcpy
官方定义1.函数原型将源指向的C字符串复制到目标指向的数组中,包括终止空字符'\0'。(并在该点停止)。'\0'是什么?与空字符串的关系""为了避免溢出,目标指向的数组的大小应足够长,以包含与源相同的C字符串(包括终止的空字符),并且不应在内存中与源重叠。2.函数
参数
destination:指向要复制内容的目标数组的指针。source:指向要被copy的c字符串3.返回值返回目的
地址
destination。
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章