在/etc/hosts檔案下加入:
192.168.1.60 u60 #設定u60為主機名
在每個節點上建立RSA秘鑰:
# ssh-keygen -t rsa # 一直按确定鍵即可
# touch /root/.ssh/authorized_keys
先配置u60,這樣u60就可以無密碼通路u62和u63了:
u60# scp /root/.ssh/id_rsa.pub u62:/root/.ssh/id_rsa.pub_u60
u60# ssh u62 "cat /root/.ssh/id_rsa.pub_u60>> /root/.ssh/authorized_keys"
面試題
1) void GetMemory(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
請問運作Test 函數會有什麼樣的結果, 有沒有問題?
2) void Test(void)
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf(str);
}
請問運作Test 函數會有什麼樣的結果,有沒有問題 ?
3) char *GetMemory(void)
{
char p[] = "hello world";
return p;
void Test(void)
char *str = NULL;
str = GetMemory();
printf(str);
請問運作Test 函數會有什麼樣的結果,有沒有問題 ?
4) 雙向連結清單的頭指針為pStart, 尾指針為pEnd, 其中一個元素的指針為p, 将p删除,放到最後。
6) 編寫strcat函數
已知strcat函數的原型是char *strcat (char *strDest, const char *strSrc);
其中strDest 是目的字元串,strSrc 是源字元串。
7) 寫一個單件CSingleton;
8) 給定兩個字元串 s1 和s2, 要求判定s2是否能夠通過s1做循環移位得到字元串包含。例如,給定s1 = aabcd和s2= cdaa,傳回true,如果s1 == abcd 和s2 = acbd, 傳回false.
NO1
void GetMemory(char *p)
{
p=(char *)malloc(100);
}
void Test()
char * str=NULL;
GetMemory(str);
strcpy(str,"Hello world");
printf(str);
實質:GetMemory(str)在調用時會生成一個_str與str指向同一個數,這是因為C語言中函數傳遞形參不改變實參的内容,但是指針指向的内容是相同的,是以可以用指針控制資料。題中的GetMemory(str),實質是對_str的操作,并沒有對str操作,函數結束後_str撤銷,是以不會産生新的記憶體空間,str仍然是一個空指針。
NO2
char *GetMemory()
char p[]="Hello World";
return p;
char * str=NULL;
str=GetMemory();
printf(str);
實質:當一個函數調用結束後會釋放記憶體空間,釋放它所有變量所占用的空間,是以數組空間被釋放掉了,也就是說str所指向的内容不确定是什麼東西。但是傳回的指針指向的位址是一定的。
NO3
Return “hello world”;
實質:本例列印hello world,因為傳回常量區,而且并沒有修改過。在上一個例子中不一定能列印hello world,因為指向的是棧區。
NO4
void GetMemory(char **p,int num)
*p=(char *)malloc(num);
GetMemory(&str,100);
strcpy(str,"Hello");
可以正确的列印Hello但是記憶體洩露了,在GetMemory()中使用了malloc申請記憶體,但是在最後卻沒有對申請的記憶體做任何處理,是以可能導緻記憶體的洩露,非常危險。
NO5
char *str=(char *)malloc(100);
free(str);
if (str!=NULL)
strcpy(str,"World");
printf(str);
}
申請空間,拷貝字元串,釋放空間,前三步操作都沒有問題,到了if語句裡的判斷條件開始出錯了。因為一個指針被釋放了之後其内容并不是NULL,而是一個不确定的值,是以if語句永遠不能被執行,這也是著名的“野”指針問題。
NO6
void GetMemory(void)
strcpy(str,"hello");
if (str !=NULL)
strcpy(str,"world");
Str 為野指針,列印的結果不能确定。