- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C笔试1
2010 C、C++笔试题大全,被问的概率几乎 100%。
strcpy 函数:
char *strcpy(char * strDest,const char* strSrc)//注意第二个参数用const 修饰
{
assert((strDest! NULL)(strSrc! NULL));
char*address strDest; // temporary pointersaveaddressofthestrDest.
while((*strDest + *strSrc++)! \0); //copythesrcstringtothedeststring
return strDest; //returndest str
}
memcpy 函数:
void* memcpy(void *pvTo,void * pvForm,size_t size)
{
assert(pvTo! NULLpvFrom! NULL);
assert(pvTo pvFrom+size ||pvFrom pvTo+size); //防止内存重叠
byte *pbTo (byte *)pvTo;
byte *pbFrom (byte *)pvFrom;
while(size--0) //copy count bytes of src to dest
*pbTo++ *pbFrom++;
return pvTo;
}
strlen完美版:
int strlen(const char * str)
{
assert(str! NULL);
int len 0;
while((*str++)! \0) //*str point to the first parameter‘s address, str
pointer move to the string trail
len ++;
return len;
}
strcmp函数完美版:
int strcmp(const char * str1,const char *str2)
{
while(1)
{
if(*str1*str2) return 1;
else if(*str1*str2) return -1;
else return 0;
str1++;
str2++;
}
}
很少有真正精通了C语言编程的学员,一般都有或多或少概念不是完全清楚的问题,
特别是一些需要丰富的实战经验才能体会和明白的问题,如字符串,指针,类型转换,定义
指向函数的指针类型,这也是导致学习C 困难的一个原因。下面有几个简单测试将能发现
你对C语言的掌握情况。
1)intx 35;
char str[10];
//问:strlen(str)和sizeof(str)的值分别是多少?
答:strlen(str) 值不确定,strlen 根据\0确定字符串是否结束。
sizeof(str) 10 sizeof 一个数组为数组长度
strcpy(str,/*共 13个字母*/);
//问:此时x 和strlen(str)的值分别是多少?
答:x 为35
strcpy(char*dest,const char*src)
根据src来复制dest,依照src 的\0决定复制的长度,而dest 必须要提供足够的长度,这
里会引起溢出,strlen 返回13,但是数组外部的数据已经被破坏
strlen 的值为13,在VC++环境下,x 的值是要改变的(其他编译器下没试,).虽然表面上看来,
在程序中并没有修改x 的值,但是实际运行的结果是上面的x 的值发生了修改,这是因为
strcpy 以后,把多余的数据拷贝进了str 的邻居(int 类型的x)中,所以x 的数据也就变了.这是一
个曾让我刻骨铭心的问题,在我刚出道时遇到这个问题,虽然在朋友的帮助下解决了这个问题,
但一直不明白x 的值为何变了,只有最后走上培训教师的岗位,才开始梳理自己曾经的困惑,
才开始总结以前的经验供学员们借鉴.我觉得这个题目的价值非常之大,它能引起学员对字符
串拷贝越界问题的足够重视,并且通过这个问题更能明白字符串的处理是怎么回时,更能明白
字符串与字符数组的关系:字符串就是一个字符数组,只是把这个字符数组用在处理串的函数
中时,这些函数不考虑数组的长度,只是记住数组的首地址,从首地址开始处
文档评论(0)