2021-08-18

姓名:朱軍偉? ? ? ? ? ? ? ?學(xué)號(hào):19170100001? ? ? ? ? ?學(xué)院:電子工程學(xué)院? ? ? ? ? ? 班級(jí):1902015

原文轉(zhuǎn)自: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

【嵌牛導(dǎo)讀】任何行業(yè)的終極目標(biāo)都是為了謀求發(fā)展,嵌入式作為一個(gè)前沿行業(yè),我們有必要熟悉一下常見(jiàn)的面試題,我將此作為一個(gè)系列發(fā)布。

【嵌牛鼻子】嵌入式行業(yè)面試題

【嵌牛提問(wèn)】如何輕松應(yīng)對(duì)嵌入式行業(yè)面試?

【嵌牛正文】

公司考試這種題目主要考你編寫的代碼是否考慮到各種情況,是否安全(不會(huì)溢出)

各種情況包括:

1、參數(shù)是指針,檢查指針是否有效

2、檢查復(fù)制的源目標(biāo)和目的地是否為同一個(gè),若為同一個(gè),則直接跳出

3、讀寫權(quán)限檢查

4、安全檢查,是否會(huì)溢出

memcpy 拷貝一塊內(nèi)存,內(nèi)存的大小你告訴它

strcpy 是字符串拷貝,遇到'\0'結(jié)束

/* memcpy ─── 拷貝不重疊的內(nèi)存塊 */

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);//檢查兩個(gè)指針指向的內(nèi)存是否重疊

while(size-->0)

*pbTo++ == *pbFrom++;

return(pvTo);

}

華為面試題:怎么判斷鏈表中是否有環(huán)?

bool CircleInList(Link* pHead)

{

if(pHead = = NULL || pHead->next = = NULL)//無(wú)節(jié)點(diǎn)或只有一個(gè)節(jié)點(diǎn)并且無(wú)自環(huán)

return (false);

if(pHead->next = = pHead)//自環(huán)

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);

}

兩個(gè)字符串,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。編寫一個(gè) C 函數(shù),該函數(shù)在一個(gè)字符串中找到可能的最長(zhǎng)的子字符串,且該字符串是由

同一字符組成的。

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。請(qǐng)編寫一個(gè) C 函數(shù),該函數(shù)在給定的內(nèi)存區(qū)域搜索給定的字符,并返回該字符所在位置

索引值。

int search(char *cpSource, int n, char ch)

{

int i;

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

return i;}

一個(gè)單向鏈表,不知道頭節(jié)點(diǎn),一個(gè)指針指向其中的一個(gè)節(jié)點(diǎn),問(wèn)如何刪除這個(gè)指針指向的

節(jié)點(diǎn)?

將這個(gè)指針指向的 next 節(jié)點(diǎn)值 copy 到本節(jié)點(diǎn),將 next 指向 next->next,并隨后刪除原 next

指向的節(jié)點(diǎn)。

#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)

這種方式和編譯器中得函數(shù)調(diào)用關(guān)系相關(guān)即先后入棧順序。不過(guò)不同

編譯器得處理不同。也是因?yàn)?C 標(biāo)準(zhǔn)中對(duì)這種方式說(shuō)明為未定義,所以

各個(gè)編譯器廠商都有自己得理解,所以最后產(chǎn)生得結(jié)果完全不同。

因?yàn)檫@樣,所以遇見(jiàn)這種函數(shù),我們首先要考慮我們得編譯器會(huì)如何處理

這樣得函數(shù),其次看函數(shù)得調(diào)用方式,不同得調(diào)用方式,可能產(chǎn)生不同得

結(jié)果。最后是看編譯器優(yōu)化。

2.寫一函數(shù),實(shí)現(xiàn)刪除字符串 str1 中含有的字符串 str2.

第二個(gè)就是利用一個(gè) KMP 匹配算法找到 str2 然后刪除(用鏈表實(shí)現(xiàn)的話,便捷于數(shù)組)

/*雅虎筆試題(字符串操作)

給定字符串 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--) //否則,開(kāi)始循環(huán)計(jì)算

{

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.寫一個(gè)函數(shù)比較兩個(gè)字符串 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 );

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

  • 姓名:朱軍偉 學(xué)號(hào):19170100001 學(xué)院:電子工程學(xué)院 班級(jí):1902015...
    a6ec596ea603閱讀 215評(píng)論 0 0
  • 姓名:朱軍偉 學(xué)號(hào):19170100001 學(xué)院:電子工程學(xué)院 班級(jí):1902015...
    a6ec596ea603閱讀 91評(píng)論 0 0
  • 姓名:朱軍偉 學(xué)號(hào):19170100001 學(xué)院:電子工程學(xué)院 班級(jí):1902015...
    a6ec596ea603閱讀 140評(píng)論 0 0
  • 姓名:朱軍偉 學(xué)號(hào):19170100001 學(xué)院:電子工程學(xué)院 班級(jí):1902015...
    a6ec596ea603閱讀 504評(píng)論 0 0
  • 姓名:朱軍偉 學(xué)號(hào):19170100001 學(xué)院:電子工程學(xué)院 班級(jí):1902015...
    a6ec596ea603閱讀 845評(píng)論 0 0

友情鏈接更多精彩內(nèi)容