天天看點

設定不輸入密碼ssh登入

在/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 為野指針,列印的結果不能确定。

繼續閱讀