funclist(不断更新)

 /*filename:funclist.c
  list some useful functions in stander lib,
  which we can use directly.
 */ 
 /*1:getopt()*/  
    while ((c = getopt(argc, argv, "l:i:s:p:h")) != -1) {
        switch (c) {
        case 'l':             
            logfile = optarg;
            break;
        case 'p':             
            service = optarg;
            break;
        case 'h':
        default:
            printf("/nusage: %s [-l logfile] [-p TCP service_name]/n",
                   argv[0]);
            exit(0);
        }
    }
 /*2:getenv()*/
 char *datadir;
 if ((datadir = getenv("WS_DATA_PATH")) == NULL) {
  fprintf(stderr,"Can not get the WS_DATA_PATH enviroment variable/n");
        exit(0);
    }
 /*3:memmove and memcopy*/
 #include <string.h>    
 #include <stdio.h>   
 
 int main()    
 {    
  int a[10];    
  for(int i=0; i < 10; i++)    
        a[i] = i;    
  MemCopy(&a[4],a,sizeof(int)*6);    //result:0 1 2 3 0 1 2 3 0 1  
  //memcpy(&a[4], a, sizeof(int)*6); //result:0 1 2 3 0 1 2 3 0 1     
  //memmove(&a[4],a,sizeof(int)*6);  //result:0 1 2 3 0 1 2 3 4 5      
  //memmove(a, &a[4], sizeof(int)*6);//result:4 5 6 7 8 9 6 7 8 9     
  //memcpy(a, &a[4], sizeof(int)*6); //result:4 5 6 7 8 9 6 7 8 9   
  for(i = 0; i < 10; i++)    
   printf("%d ",a[i]);    
  printf("/n");    
  return 0;    
 }  
 /*summary
  1. 当 src 和 dest 所指内存区有重叠时,memmove 相对 memcpy 能提供保证:

      保证能将 src 所指内存区的前 n 个字节正确的拷贝到 dest 所指内存中;
  2. 当 src 地址比 dest 地址低时,两者结果一样。

      memmove 与 memcpy 的区别仅仅体现在dest 的头部和 src 的尾部有重叠的情况下;
      总体来说:即从高向低复制都可以,从低向高复制用memmove()。
 */

 

 

 /*4:sscanf()*/  

int sscanf (const char *str,const char * format,........);

/*函数说明     sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。
 (1)-: 表示范围,如:%[1-9]表示只读取1-9这几个数字 %[a-z]表示只读取a-z小写字母,类似地 %[A-Z]只读取大写字母

 (2)^: 表示不取,如:%[^1]表示读取除'1'以外的所有字符 %[^/]表示除/以外的所有字符

 (3),: 范围可以用","相连接 如%[1-9,a-z]表示同时取1-9数字和a-z小写字母

 (4)原则:从第一个在指定范围内的数字开始读取,到第一个不在范围内的数字结束%s

*/

 

   char buf[512] ;

  sscanf("123456 ", "%s", buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!

  printf("%s/n", buf);

  结果为:123456

  2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。

  sscanf("123456 ", "%4s", buf);

  printf("%s/n", buf);

  结果为:1234

  3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。

  sscanf("123456 abcdedf", "%[^ ]", buf);

  printf("%s/n", buf);

  结果为:123456

  4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。

  sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);

  printf("%s/n", buf);

  结果为:123456abcdedf  

  sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);

  printf("%s/n",buf);

  结果为:123456

  5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。

  sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);

  printf("%s/n", buf);

  结果为:123456abcdedf

  6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中

  sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);

  printf("%s/n", buf);

  结果为:12DDWDFF

你可能感兴趣的:(c,tcp,service,null,Path)