请教关于strcpy和strcmp的老问题(最近准备面试,谢谢)

Eleve 2007-04-23 11:01:35
最近准备面试,在网上找了些关于C的经典老题。
不过C不是很熟悉了,关于strcpy里的一些语句含义不是很清楚
希望大家能给小弟指点一二,不胜感激。
题目如下:
已知strcpy函数原型:char *strcpy(char *strDest, const char *strSrc);
其中strDest是目的字符串,strSrc是源字符串
1、不调用C++/C的字符串库函数,编写strcpy
2、strcpy能够将strScr的内容复制到strDest,为什么还要char *类型的返回值。
1---|char *strcpy(char *strDest, const char *strSrc);
2---|{
3---| assert((strDest != NULL)&&(strSrc != NULL));
4---| char *address = strDest;
5---| while((*strDest++ = *strSrc++)!='\0')
6---| NULL;
7---| return address;
8---|}
//-------问题1(Line1):为什么第二个参数是用const
//-------问题2(Line1):为什么char *strcpy(char *strDest, const char *strSrc)后边加了一个“;”号
char *strcpy(char *strDest, const char *strSrc)
{
//......
}
不是一个函数吗?
//-------问题3(Line6):为什么要在此处增加“NULL;”这样一句话?
真的很菜,希望大家指点迷津,不胜感激
...全文
452 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleve 2007-11-06
  • 打赏
  • 举报
回复
版面更新之后再次总结一下:
=====================================================
char   *strCpy(char   *strDest,   const   char   *strSrc) 
{
assert((strDest != NULL)&&(strSrc != NULL));
char *address = strDest;
while((*strDest = *strSrc)!= '\0')
{
strDest++;
strSrc++;
}
return address;
}
Eleve 2007-05-10
  • 打赏
  • 举报
回复
总结一下:
=====================================================
char *strCpy(char *strDest, const char *strSrc)
{
assert((strDest != NULL)&&(strSrc != NULL));
char *address = strDest;
while((*strDest = *strSrc)!='\0')
{
strDest++;
strSrc++;
}
return address;
}
starwing83 2007-04-23
  • 打赏
  • 举报
回复
链式表达式……今天又学到了~~谢谢~
Eleve 2007-04-23
  • 打赏
  • 举报
回复
哦,对对,加*表示地址了,谢谢谢谢
bargio_susie 2007-04-23
  • 打赏
  • 举报
回复
是这样:
while((*strDest = *strSrc)!='\0')
{
strDest++;
strSrc++;
}
Eleve 2007-04-23
  • 打赏
  • 举报
回复
TO:iu_81(黄云万里动风色,白波九道流雪山。)
非常感谢,我理解的你所说的:
while((*strDest++ = *strSrc++)!='\0')
NULL;
相当于
while((*strDest++ = *strSrc++)!='\0')
{ }
的语句是不是也可以这么理解:
while((*strDest = *strSrc)!='\0')
{
*strDest++;
*strSrc++;
}
mymtom 2007-04-23
  • 打赏
  • 举报
回复
问题1: const char *strSrc 表示strSrc指向的串中的内容是不能改变的比如 *strSrc = 'a' 之类的语句将被编译器认为是错误
问题2:分号是不应该加的
问题3:NULL; 是接在while语句后的表示一个什么操作都不进行,实际上可以把NULL删除,但是记着要保留分号.
iu_81 2007-04-23
  • 打赏
  • 举报
回复
链式表达式的形式如:
int iLength=strlen(strcpy(strA,strB));
又如:
char * strA=strcpy(new char[10],strB);
iu_81 2007-04-23
  • 打赏
  • 举报
回复
while((*strDest++ = *strSrc++)!='\0')
NULL;
相当于
while((*strDest++ = *strSrc++)!='\0')
{ }
bargio_susie 2007-04-23
  • 打赏
  • 举报
回复
问题1:用const修饰,防止在程序中修改了*strSrc;
问题2:么可能有??是你copy错了。
问题3:就是一个空语句,其实可以就用个分号不要那个NULL也可以。目的就是把*strSrc内容全部复 制到*strDest中去。
Eleve 2007-04-23
  • 打赏
  • 举报
回复
对于第二个问题“2、strcpy能够将strScr的内容复制到strDest,为什么还要char *类型的返回值。”
网上的答案是:实现链式表达式
我不知道什么是链式表达式。。。能解释一二吗?谢谢
iu_81 2007-04-23
  • 打赏
  • 举报
回复
声明的话加“;” char *strcpy(char *strDest, const char *strSrc);
实现则不加“;” char *strcpy(char *strDest, const char *strSrc)
{
//......
}
  • 打赏
  • 举报
回复
问题1 防止你无意更改第二个参数的内容
问题2 加上是错误的
3
NULL;这一行没有什么意义
直接改成这样
while((*strDest++ = *strSrc++)!='\0')
;
Eleve 2007-04-23
  • 打赏
  • 举报
回复
TO:iu_81(黄云万里动风色,白波九道流雪山。)
在网上搜得时候看见都是加了“;”的,所以我就比较糊涂了...
iu_81 2007-04-23
  • 打赏
  • 举报
回复
问题1(Line1):在实际的程序中指向const 的指针常被用作函数的形式参数它作为一个约定来保证被传递给函数的实际对象在函数中不会被修改
iu_81 2007-04-23
  • 打赏
  • 举报
回复
问题2(Line1):不加“;”号

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧