请教关于strcpy和strcmp的老问题(最近准备面试,谢谢)
最近准备面试,在网上找了些关于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;”这样一句话?
真的很菜,希望大家指点迷津,不胜感激
[解决办法]
问题2(Line1):不加“;”号
[解决办法]
问题1 防止你无意更改第二个参数的内容
问题2 加上是错误的
3
NULL;这一行没有什么意义
直接改成这样
while((*strDest++ = *strSrc++)!= '\0 ')
;
[解决办法]
问题1:用const修饰,防止在程序中修改了*strSrc;
问题2:么可能有??是你copy错了。
问题3:就是一个空语句,其实可以就用个分号不要那个NULL也可以。目的就是把*strSrc内容全部复 制到*strDest中去。
[解决办法]
问题1: const char *strSrc 表示strSrc指向的串中的内容是不能改变的比如 *strSrc = 'a ' 之类的语句将被编译器认为是错误
问题2:分号是不应该加的
问题3:NULL; 是接在while语句后的表示一个什么操作都不进行,实际上可以把NULL删除,但是记着要保留分号.