297 while ( len >= 4 ) { 298 *d++ = *s++; 299 *d++ = *s++; 300 *d++ = *s++; 301 *d++ = *s++; 302 len -= 4; 303 }
304 while ( len-- ) { 305 *d++ = *s++; 306 } 307 }
308 return dst; 309 }
公司考试这种题目主要考你编写的代码是否考虑到各种情况,是否安全(不会溢出) 各种情况包括:
1、参数是指针,检查指针是否有效
2、检查复制的源目标和目的地是否为同一个,若为同一个,则直接跳出 3、读写权限检查
4、安全检查,是否会溢出
memcpy拷贝一块内存,内存的大小你告诉它 strcpy是字符串拷贝,遇到'\\0'结束
/* memcpy ─── 拷贝不重叠的内存块 */
void memcpy(void* pvTo, void* pvFrom, size_t size) {
void* pbTo = (byte*)pvTo;
void* pbFrom = (byte*)pvFrom;
ASSERT(pvTo != NULL && pvFrom != NULL); //检查输入指针的有效性
ASSERT(pbTo>=pbFrom+size || pbFrom>=pbTo+size);//检查两个指针指向的内存是否重叠
while(size-->0)
*pbTo++ == *pbFrom++; return(pvTo); }
华为面试题:怎么刞断链表中是否有环? bool CircleInList(Link* pHead) {
if(pHead = = NULL || pHead->next = = NULL)//无节点或只有一个节点并且无自环
file:///C|/Documents and Settings/Admi...笔试面试题大全/各公司C C++招聘笔试面试题大全/C语言面试题大全.txt(第 46/58 页)2009-9-29 3:30:32
return (false);
if(pHead->next = = pHead)//自环 return (true);
Link *pTemp1 = pHead;//step 1
Link *pTemp = pHead->next;//step 2
while(pTemp != pTemp1 && pTemp != NULL && pTemp->next != NULL) {
pTemp1 = pTemp1->next;
pTemp = pTemp->next->next; }
if(pTemp = = pTemp1) return (true); return (false); }
两个字符串,s,t;把t字符串揑入到s字符串中,s字符串有足够的空间存放t字符串 void insert(char *s, char *t, int i) {
memcpy(&s[strlen(t)+i],&s[i],strlen(s)-i); memcpy(&s[i],t,strlen(t)); s[strlen(s)+strlen(t)]='\\0'; }
1。编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是 由同一字符组成的。
char * search(char *cpSource, char ch) {
char *cpTemp=NULL, *cpDest=NULL; int iTemp, iCount=0; while(*cpSource) {
if(*cpSource == ch) {
iTemp = 0;
cpTemp = cpSource; while(*cpSource == ch) ++iTemp, ++cpSource; if(iTemp > iCount)
iCount = iTemp, cpDest = cpTemp; if(!*cpSource) break; }
++cpSource; }
return cpDest; }
2。请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位 置索引值。
int search(char *cpSource, int n, char ch) {
file:///C|/Documents and Settings/Admi...笔试面试题大全/各公司C C++招聘笔试面试题大全/C语言面试题大全.txt(第 47/58 页)2009-9-29 3:30:32

