天天看点

设置不输入密码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 为野指针,打印的结果不能确定。

继续阅读