由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请问strcpy()和memcpy()的写法问题  (转载)
相关主题
一道笔试题问个简单的memory allocation 的问题。
请帮忙看看这个字符函数的错误在哪里3 c++ challenge-and-grill questions
C pass string 问题weird output
请教一道c/c++题New C++ programmer, need to ask a I/O file read question
帮忙看看这几段程序有问题吗?关于 exception 的一个问题
gurus: How to optimize this c codestrcat()
c的问题问个char*的问题
Array in C请教一个C里面string copy的问题
相关话题的讨论汇总
话题: void话题: memcpy话题: char话题: strcpy话题: strdest
进入Programming版参与讨论
1 (共1页)
r****o
发帖数: 1950
1
【 以下文字转载自 JobHunting 讨论区 】
发信人: roufoo (五经勤向窗前读), 信区: JobHunting
标 题: 请问strcpy()和memcpy()的写法问题
发信站: BBS 未名空间站 (Wed Jun 9 12:54:07 2010, 美东)
我看到的标准strcpy()函数通常都是如下写法:
char *strcpy(char *strDest, const char *strSrc)
{
assert ((strDest!=NULL)&&(strSrc!=NULL));
char *strDest2=strDest;

while ((*strDest2++=*strSrc++)!='\0')
{
}
return strDest;
}
我看到的标准memcpy()函数通常都是如下写法:
void *memcpy(void *ptrDest, const void *ptrSrc, size_t size)
{
assert((ptrDest!=NULL)&&(ptrSrc!=NULL);

voi
N***m
发帖数: 4460
2
ptrsrc fixed?

【在 r****o 的大作中提到】
: 【 以下文字转载自 JobHunting 讨论区 】
: 发信人: roufoo (五经勤向窗前读), 信区: JobHunting
: 标 题: 请问strcpy()和memcpy()的写法问题
: 发信站: BBS 未名空间站 (Wed Jun 9 12:54:07 2010, 美东)
: 我看到的标准strcpy()函数通常都是如下写法:
: char *strcpy(char *strDest, const char *strSrc)
: {
: assert ((strDest!=NULL)&&(strSrc!=NULL));
: char *strDest2=strDest;
:

X****r
发帖数: 3557
3
你抄错了吧,memcpy里应该是char *而不是void *啊,后者没法++
明显多余的变量编译器都会优化掉的,不用想太多了。

【在 r****o 的大作中提到】
: 【 以下文字转载自 JobHunting 讨论区 】
: 发信人: roufoo (五经勤向窗前读), 信区: JobHunting
: 标 题: 请问strcpy()和memcpy()的写法问题
: 发信站: BBS 未名空间站 (Wed Jun 9 12:54:07 2010, 美东)
: 我看到的标准strcpy()函数通常都是如下写法:
: char *strcpy(char *strDest, const char *strSrc)
: {
: assert ((strDest!=NULL)&&(strSrc!=NULL));
: char *strDest2=strDest;
:

T*****9
发帖数: 2484
4
glibc里头就是void *的

【在 X****r 的大作中提到】
: 你抄错了吧,memcpy里应该是char *而不是void *啊,后者没法++
: 明显多余的变量编译器都会优化掉的,不用想太多了。

X****r
发帖数: 3557
5
你说得是哪个版本的glibc?现在的glibc-2.11.2里可是用对齐了的
地址尽可能地大片复制的,加上特定平台的直接用汇编,不是楼主贴的
这么简单的代码。不管怎么说,C里面是不能对void *直接进行指针
运算的。

【在 T*****9 的大作中提到】
: glibc里头就是void *的
r****o
发帖数: 1950
6
不好意思,我贴的是仅用于面试的版本。

【在 X****r 的大作中提到】
: 你说得是哪个版本的glibc?现在的glibc-2.11.2里可是用对齐了的
: 地址尽可能地大片复制的,加上特定平台的直接用汇编,不是楼主贴的
: 这么简单的代码。不管怎么说,C里面是不能对void *直接进行指针
: 运算的。

d****p
发帖数: 685
7
I doubt the memcpy implementation is wrong.
Dereferencing a void*?
I think the following is an OK implementation:
void* memcpy(void* dest, const void* src, size_t size)
{
assert(dest != 0 && src != 0);
char* dest2 = (char*)dest;
char* src2 = (char*)src;
while (size-- > 0)
*dest2++ = *src2++;
return dest;
}
Actually the following is also OK:
void* memcpy(void* dest, const void* src, size_t size)
{
assert(dest != 0 && src != 0);


【在 r****o 的大作中提到】
: 【 以下文字转载自 JobHunting 讨论区 】
: 发信人: roufoo (五经勤向窗前读), 信区: JobHunting
: 标 题: 请问strcpy()和memcpy()的写法问题
: 发信站: BBS 未名空间站 (Wed Jun 9 12:54:07 2010, 美东)
: 我看到的标准strcpy()函数通常都是如下写法:
: char *strcpy(char *strDest, const char *strSrc)
: {
: assert ((strDest!=NULL)&&(strSrc!=NULL));
: char *strDest2=strDest;
:

d****p
发帖数: 685
8
The strcpy doesn't need extra copy because there is no type conversion from
void* to char*

【在 r****o 的大作中提到】
: 不好意思,我贴的是仅用于面试的版本。
r****o
发帖数: 1950
9
你写的是对的,我写的错了,不好意思。

【在 d****p 的大作中提到】
: I doubt the memcpy implementation is wrong.
: Dereferencing a void*?
: I think the following is an OK implementation:
: void* memcpy(void* dest, const void* src, size_t size)
: {
: assert(dest != 0 && src != 0);
: char* dest2 = (char*)dest;
: char* src2 = (char*)src;
: while (size-- > 0)
: *dest2++ = *src2++;

1 (共1页)
进入Programming版参与讨论
相关主题
请教一个C里面string copy的问题帮忙看看这几段程序有问题吗?
What is wrong with the constructor calling?gurus: How to optimize this c code
[合集] 【求助】如何将c string中的string转换成int?谢谢c的问题
C++ STL map find does not work ???Array in C
一道笔试题问个简单的memory allocation 的问题。
请帮忙看看这个字符函数的错误在哪里3 c++ challenge-and-grill questions
C pass string 问题weird output
请教一道c/c++题New C++ programmer, need to ask a I/O file read question
相关话题的讨论汇总
话题: void话题: memcpy话题: char话题: strcpy话题: strdest