先汗一个,strcpy函数是一个库函数,他就在哪里,不会因为你的意愿而改变。除非你不用这个库函数,自己写一个
我明白你的意思,你是想问既然这个函数有返回值为什么你这个程序的strcpy(name,na);没有接受返回值是吧?先说第一点,函数有返回值没人强逼你接受,你首先要明白函数的返回值是干什么的,这个返回值对你有用没,你有必要浪费一块内存来存这个返回值没。
strcpy的功能是复制第二个参数内容到第一个参数中(第一个参数必须有足够的内存来接受第二个参数)然后返回第一个参数的地址。你这个程序中第一个参数的地址是你的私有变量name,既然已经有了当然没必要再存了。
当然,本人一直以为这个返回值没用,我以前看过林锐的书,他介绍过这个函数为什么要返回值,我记得他好像是说这个返回值没什么用,只是让程序设计更灵活才这样用的。所以一般不用理他这个返回值。另外据说这个是strcpy的源码:
/***
*char *strcpy(dst, src) - copy one string over another
*
*Purpose:
* Copies the string src into the spot specified by
* dest; assumes enough room.
*
*Entry:
* char * dst - string over which "src" is to be copied
* const char * src - string to be copied over "dst"
*
*Exit:
* The address of "dst"
*
*Exceptions:
*******************************************************************************/
char * __cdecl strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ )
; /* Copy src over dst */
return( dst );
}
超级简单,看一下你就明白了
可以不返回指针,或者不去捕捉这个指针.
你这个错误主要不是strcpy吧,C++可以申请动态数组吗?
有返回值的函数是返回了一个值,但没有强制要求你要去接收这个值。很多时候直接就拿他的返回值来做判断了,比如一个函数是这样:
bool IsDigit(char* szInput);
那我可以直接
if(IsDigit("10") == true)
....
来使用,不用一个值去接收它的返回值,但实际上在内存里他是返回了一个值的,你不用变量去取的话就改变不了他的返回值了。。
首先你要理解C语言里面的返回值。对于声明返回值不是 void 的函数,都是有返回值的。虽然有返回值,但是你可以忽略返回值不使用它。
其次,char* strcpy(char* s1,char* s2) 的返回值,其实就是 s1 。因为调用一次 strcpy 就已经把 s2 里面的内容完全复制到了 s1 里面了,一般也就完成调用 strcpy 的目的了,返回值也就没用了。
最后,给你一个使用 strcpy 返回值的例子:
#include
#include
int main(int argc, char *argv[])
{
char a[100];
char b[100];
char c[100];
strcpy(a,strcpy(b,strcpy(c,"Hello world\n")));
printf("%s%s%s",a,b,c);
return 0;
}