请问下面这个strcpy 函数的功能是把字符串t 复制到串s中。 是不是正确...
发布网友
发布时间:2024-10-23 16:57
我来回答
共5个回答
热心网友
时间:2024-10-29 23:48
这种写法不但正确而且非常高效!
(1)while(condition){//循环体}当condition为非零时,就进入循环体,此例循环体是一句空语句,即什么都不做;
(2)我们知道字符串结束符为'\0'其ASCII值为0,我们来检查一下condition语句:
*s++ = *t++;
// 分解一下:
1)首先*s = *t (把指针t所指内存赋值到s所指内存,由于指针类型为char,则系统每次会取出sizeof(char)个字节大小的内存进行赋值操作,s所指原内存被覆盖掉,而t所指内容保持不变;
2)condition语句最后的值为指针s所指的内存内容;
3)while(condition)//while开始判断condition的值,若为零则循环结束,否则进入循环体;
4)然后s++,t++指针移动sizeof(char)个字节,同时指向下一个内存单元;
显然:只有当condition(即指针s所指内容)为零时循环结束,我们可以看到只有当字符串指针t指向字符串结束符'\0'时(其ASCII码为0),通过赋值语句赋给指针s所指内存时,s的所指内容为'\0'(编译器看到condition就是0),循环结束!而此时,字符串复制工作也正好结束。非常完美!
通过分析strcpy的实现,那么在使用中需要注意的是:
strcpy函数把源字符串包含字符串结束符'\0'都一个不漏地拷贝到目标内存中了,那么分配给目标内存的大小除了包含有效字符串长度时,还要多加一个sizeof(char)的内存大小来存放字符串结束符'\0',见如下的示例:
char* t = {"Hello World"};
char* s = new char[strlen(t) + 1]; // strlen(t)返回有效字符串长度
strcpy(s, t);
// 使用s
delete s;
另外个人认为,这个函数应该是这样的参数才最为合理:
strcpy(char* s, const char* t); // 即源字符串指针所指内容应该为只读
热心网友
时间:2024-10-29 23:51
=是赋值, 不是判断相等。
热心网友
时间:2024-10-29 23:48
是对的,while(*s++=*t++);里面的语句是先执行*t=*t,再s++,t++,当达到'\0'时候,也复制进去了,所以是对的。
热心网友
时间:2024-10-29 23:46
(*s++ = *t++);
这个是赋值不是 (*s++ == *t++);
当赋值语句的返回值是 *t,若 *t返回为0,则退出循环·
热心网友
时间:2024-10-29 23:51
正确
(*s++ = *t++)先赋值 ,再判断