2021-08-18

姓名:朱军伟               学号:19170100001           学院:电子工程学院            班级:1902015

原文转自:https://download.csdn.net/download/sun_jfly/4326176?utm_medium=distribute.pc_relevant_t0.none-task-download-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-download-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

【嵌牛导读】任何行业的终极目标都是为了谋求发展,嵌入式作为一个前沿行业,我们有必要熟悉一下常见的面试题,我将此作为一个系列发布。

【嵌牛鼻子】嵌入式行业面试题

【嵌牛提问】如何轻松应对嵌入式行业面试?

【嵌牛正文】

公司考试这种题目主要考你编写的代码是否考虑到各种情况,是否安全(不会溢出)

各种情况包括:

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)//无节点或只有一个节点并且无自环

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)

{

int i;

for(i=0; i<n && *(cpSource+i) != ch; ++i);

return i;}

一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的

节点?

将这个指针指向的 next 节点值 copy 到本节点,将 next 指向 next->next,并随后删除原 next

指向的节点。

#include <stdio.h>

void foo(int m, int n)

{

printf("m=%d, n=%d\n", m, n);

}

int main()

{

int b = 3;

foo(b+=3, ++b);

printf("b=%d\n", b);

return 0;

}

输出:m=7,n=4,b=7(VC6.0)

这种方式和编译器中得函数调用关系相关即先后入栈顺序。不过不同

编译器得处理不同。也是因为 C 标准中对这种方式说明为未定义,所以

各个编译器厂商都有自己得理解,所以最后产生得结果完全不同。

因为这样,所以遇见这种函数,我们首先要考虑我们得编译器会如何处理

这样得函数,其次看函数得调用方式,不同得调用方式,可能产生不同得

结果。最后是看编译器优化。

2.写一函数,实现删除字符串 str1 中含有的字符串 str2.

第二个就是利用一个 KMP 匹配算法找到 str2 然后删除(用链表实现的话,便捷于数组)

/*雅虎笔试题(字符串操作)

给定字符串 A 和 B,输出 A 和 B 中的最大公共子串。

比如 A="aocdfe" B="pmcdfa" 则输出"cdf"

*/

//Author: azhen

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

char *commanstring(char shortstring[], char longstring[]){

int i, j;

char *substring=malloc(256);

if(strstr(longstring, shortstring)!=NULL) //如果……,那么返回 shortstring

return shortstring;

for(i=strlen(shortstring)-1;i>0; i--) //否则,开始循环计算

{

for(j=0; j<=strlen(shortstring)-i; j++){

memcpy(substring, &shortstring[j], i);

substring[i]='\0';

if(strstr(longstring, substring)!=NULL)

return substring;

}

}

return NULL;

}

main()

{

char *str1=malloc(256);

char *str2=malloc(256);

char *comman=NULL;

gets(str1);

gets(str2);

if(strlen(str1)>strlen(str2)) //将短的字符串放前面

comman=commanstring(str2, str1);

else

comman=commanstring(str1, str2);

printf("the longest comman string is: %s\n", comman);

}

11.写一个函数比较两个字符串 str1 和 str2 的大小,若相等返回 0,若 str1 大于

str2 返回 1,若 str1 小于 str2 返回-1

int strcmp ( const char * src,const char * dst)

{

int ret = 0 ;while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)

{

++src;

++dst;

}

if ( ret < 0 )

ret = -1 ;

else if ( ret > 0 )

ret = 1 ;

return( ret );

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • 姓名:朱军伟 学号:19170100001 学院:电子工程学院 班级:1902015...
    a6ec596ea603阅读 205评论 0 0
  • 姓名:朱军伟 学号:19170100001 学院:电子工程学院 班级:1902015...
    a6ec596ea603阅读 75评论 0 0
  • 姓名:朱军伟 学号:19170100001 学院:电子工程学院 班级:1902015...
    a6ec596ea603阅读 126评论 0 0
  • 姓名:朱军伟 学号:19170100001 学院:电子工程学院 班级:1902015...
    a6ec596ea603阅读 471评论 0 0
  • 姓名:朱军伟 学号:19170100001 学院:电子工程学院 班级:1902015...
    a6ec596ea603阅读 639评论 0 0