Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1325796
  • 博文数量: 175
  • 博客积分: 2743
  • 博客等级: 少校
  • 技术积分: 4024
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-30 01:41
文章分类

全部博文(175)

文章存档

2015年(1)

2013年(53)

2012年(71)

2011年(50)

分类: LINUX

2013-03-05 11:03:12

stdio.h&stdlib.h&string.h

  (2011-12-02 13:15:07)
标签: 

杂谈

 

stdio.h中的标准输入输出函数

  int getchar() //从标准输入设备读入一个字符,显示   int putchar() //向标准输出设备写一个字符   int scanf(char *format[,argument…]) //从标准输入设备读入数据   int printf(char *format[,argument…]) //格式化字符串输入到标准输出设备   int puts(char *string) //输出一个字符串到标准输出设备

  char *gets(char *string) //从标准输入设备读入一个字符串

 

************************************************************************

 

stdlib.h

1 字符串转换

double atof (const char*);

int atoi (const char*);

long atol (const char*);

double strtod (const char*, char**);

long strtol (const char*, char**, int);

unsigned long strtoul (const char*, char**, int);

1> 第二组函数的参数意义如下:

const char* 指向需要转换的字符串

char**  更新后指向当前数字串之后的一个位置

int  基数(进制数)

2> strtol函数举例:

#include

#include

#include

int main()

{

 char *buf = "  0B 00 41 42 43 44 45 46 47 48 49  ";

 char *ptr = buf;

 

  while (isspace(*ptr))

  ptr++;

 while (*ptr != '\0')

 {

  printf("%ld\n", strtol(ptr, &ptr, 16));

  while (isspace(*ptr))

   ptr++;

 }

 

 return 0;

}

 

2 随机数

常量

#define RAND_MAX 0x7FFF  rand的最大返回值

函数

void srand (unsigned int);  置随机数发生器(种子)

int rand (void);   返回下一个伪随机数

 

3 内存管理

常量

#define NULL ((void *)0)  空指针

函数

void* calloc (size_t, size_t); 分配内存, 并清零

void* malloc (size_t);  分配内存

void* realloc (void*, size_t); 重新分配内存, 返回新指针

void free (void*);  释放内存

 

4 与环境的接口

常量

#define EXIT_SUCCESS 0

#define EXIT_FAILURE 1

函数

void abort (void);

void exit (int);

int atexit (void (*)(void));

int system (const char*);

char* getenv (const char*);

 

5 查找与排序

void* bsearch (const void*, const void*, size_t, size_t,

                 int (*)(const void*, const void*));

void qsort (const void*, size_t, size_t,

                 int (*)(const void*, const void*));

1> comp函数的返回值

int comp(const void *p1, const void *p2)

{

 const int *pi1 = (const int *)p1;

 const int *pi2 = (const int *)p2;

 return *pi1 - *pi2;

}

若第一个指针所指向的内容, 排序后应该放在第二个指针所指向的内容之前, 那么应返回负值;

反之返回正值; 其他情况返回0. 上例中的comp函数将int数组按升序排序.

2> qsort的调用方法

qsort((void *)list, length, sizeof(int), comp);

 

6 整数运算

结构

typedef struct { int quot, rem; } div_t;

typedef struct { long quot, rem; } ldiv_t;

函数

int abs (int);

long labs (long);

div_t div (int, int);

ldiv_t ldiv (long, long);

 

7 多字节字符

常量

MB_CUR_MAX  多字节字符中的最大字节数

函数

size_t wcstombs (char*, const wchar_t*, size_t);

int wctomb  (char*, wchar_t);

int mblen  (const char*, size_t);

size_t mbstowcs (wchar_t*, const char*, size_t);

int mbtowc  (wchar_t*, const char*, size_t);

 

stdlib.h头文件下的常用函数

atof()将字符串转换成浮点数的函数
原形:double atof(const char *s)
功能:把s所指向的字符串转换成double类型。
   s格式为:符号 数字.数字 E符号 数字
返回值:字符串的转换值。
头文件:math.h、stdlib.h

atoi()将字符串转换成整型数的函数
原形:int atoi(const char *s)
功能:把s所指向的字符串转换成int类型。
   s格式为:符号 数字
返回值:字符串的转换值。若出错则返回0。
头文件:stdlib.h

atol()将字符串转换成长整型数的函数
原形:long atol(const char *s)
功能:把s所指向的字符串转换成long int类型。
   s格式为:符号 数字
返回值:字符串的转换值。若出错则返回0。
头文件:stdlib.h
===================================================
calloc()分配内存函数
原形:void *calloc(size_t nitems,size_t size)
功能:在堆中分配一块内存,将该内存的内容全部清0。
返回值:返回指向新分配内存的指针。空间不够则返回NULL。
头文件:stdlib.h、calloc.h
===================================================
free()释放已分配内存的函数
原形:void free(void *block)
功能:释放由calloc、malloc、realloc函数调用所分配的内存。
头文件:stdlib.h、alloc.h
====================================================
gcvt()把双精度数转化成字符串的函数
原形∶char*gcvt(value,ndigit,buf)
  其中∶double value是待转化数
     int ndigit是转化长度
     char *buf保存转化后的地址
头文件∶stdlib.h
====================================================
geninterrupt()执行中断函数
原形:void geninterrupt(int n)
调用方式:geninterrupt(软中断号)
功能:产生一个8086软中断
注:需先向寄存器传递入口信息(用伪变量)
  例如  伪变量=要赋的值(入口信息);
      调用geninterrupt()函数后得接受出口信息
  例如  变量名=伪变量
伪变量∶Turbo C 允许使用伪变量直接访问相应的8086寄存器。伪变量的类型有两种。
  ① unsigned int : _AX、 _BX、 _CX、 _DX、 _CS、 _DS、 _SS、 _ES、_SP、 _BP、 _DI、 _SI
  ② unsigned char: _AL、 _AH、 _BL、 _BH、 _CL、 _CH、 _DL、 _DH
===================================================
getenv()读取环境变量的当前值的函数
原形:char *getenv(const char *name)
用法:s=getenv("环境变量名");
   需先定义char *s;
功能:返回一给定的环境变量值,环境变量名可大写或小写。如果指定的变量在环境中未定义,则返回一空串。
头文件:stdlib.h
====================================================
itoa()把整形数转换为字符串的函数
原形:char *itoa(int value,char *string,int radix)
功能:把value的值转换为以NULL结束的字符串,并把结果存在string中。radix是转换的基数值,在2到36之间。分配给string的空间必须可容纳返回的所有字节(最多17字节)。
返回值:指向string的指针
头文件:stdlib.h
==================================================
_lrotl()将一个无符号长整形数左循环移位的函数
原形:unsigned long _lrotl(unsigned long value,int count)
功能:将value向左循环移动count位。
返回值:将value向左循环移动count位后的值。
头文件:stdlib.h

_lrotr()将一个无符号长整形数右循环移位的函数
原形:unsigned long _lrotr(unsigned long value,int count)
功能:将value向右循环移动count位。
返回值:将value向右循环移动count位后的值。
头文件:stdlib.h



ltoa()把长整形数转换为字符串的函数
原形:char *ltoa(long value,char *string,int radix)
功能:把value的值转换为以NULL结束的字符串,并把结果存在string中。radix是转换的基数值,在2到36之间。分配给string的空间必须可容纳返回的所有字节(最多33字节)。
返回值:指向string的指针
头文件:stdlib.h

malloc()分配内存函数
原形:void *malloc(size_t size)
功能:从堆中分配大小为size字节的块。win32也适用。
返回值:返回新分配内存的地址,若无足够内存,返回NULL。
头文件:alloc.h、stdlib.h
============================================================
putenv()将字符串放入当前环境中的函数
原形:int putenv(const char *name)
用法例:putenv("PATH=C:\B\TC");
功能:把字符串name加到当前程序运行的环境中。当程序结束后,原环境将得到恢复。
返回值:0(成功);-1(失败)
头文件:stdlib.h
============================================================
realloc()重新分配内存函数
原形:void *realloc(void *block,size_t size)
   block指向用malloc、calloc或realloc已得到的内存。
   size是重新分配的字节。
返回值:重分配的块地址。若不能重分配,则返回NULL。
头文件:stdlib.h
=============================================================
_rotl()将一个无符号整形数左循环移位的函数
原形:unsigned _rotl(unsigned value,int count)
功能:将value向左循环移动count位。
返回值:将value向左循环移动count位后的值。
头文件:stdlib.h
=============================================================
_rotr()将一个无符号整形数右循环移位的函数
原形:unsigned _rotr(unsigned value,int count)
功能:将value向右循环移动count位。
返回值:将value向右循环移动count位后的值。
头文件:stdlib.h

 

*********************************************************************

string.h

1、strcpy

  函数名: strcpy

  功 能: 拷贝一个字符串到另一个

  用 法: char *strcpy(char *destin, char *source);

  程序例:

  #include

  #include

  int main(void)

  {

  char string[10];

  char *str1 = "abcdefghi";

  strcpy(string, str1);

 

printf("%s\n", string);

  return 0;

  }

2、strcat

  函数名: strcat

  功 能: 字符串拼接函数

  用 法: char *strcat(char *destin, char *source);

  程序例:

  #include

  #include

  int main(void)

  {

  char destination[25];

  char *blank = " ", *c = "C++", *Borland = "Borland";

  strcpy(destination, Borland);

  strcat(destination, blank);

  strcat(destination, c);

  printf("%s\n", destination);

  return 0;

  }

3、strchr

  函数名: strchr

  功 能: 在一个串中查找给定字符的第一个匹配之处\

  用 法: char *strchr(char *str, char c);

  程序例:

  #include

  #include

  int main(void)

  {

  char string[15];

  char *ptr, c = 'r';

  strcpy(string, "This is a string");

  ptr = strchr(string, c);

  if (ptr)

  printf("The character %c is at position: %d\n", c, ptr-string);

  else

  printf("The character was not found\n");

  return 0;

  }

4、strcmp

  函数名: strcmp

  功 能: 串比较

  用 法: int strcmp(char *str1, char *str2);

  看Asic码,str1>str2,返回值 > 0;两串相等,返回0

  程序例:

  #include

  #include

  int main(void)

  {

  char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";

  int ptr;

  ptr = strcmp(buf2, buf1);

  if (ptr > 0)

  printf("buffer 2 is greater than buffer 1\n");

  else

  printf("buffer 2 is less than buffer 1\n");

  ptr = strcmp(buf2, buf3);

  if (ptr > 0)

  printf("buffer 2 is greater than buffer 3\n");

  else

  printf("buffer 2 is less than buffer 3\n");

  return 0;

  }

5、strnicmp

  函数名: strnicmp

  功 能: 将一个串中的一部分与另一个串比较, 不管大小写

  用 法: int strnicmp(char *str1, char *str2, unsigned maxlen);

  程序例:

  #include

  #include

  int main(void)

  {

  char *buf1 = "BBB", *buf2 = "bbb";

  int ptr;

  ptr = strnicmp(buf2, buf1);

  if (ptr > 0)

  printf("buffer 2 is greater than buffer 1\n");

  if (ptr < 0)

  printf("buffer 2 is less than buffer 1\n");

  if (ptr == 0)

  printf("buffer 2 equals buffer 1\n");

  return 0;

  }

6、strcpy

  函数名: strcpy

  功 能: 串拷贝

  用 法: char *strcpy(char *str1, char *str2);

  程序例:

  #include

  #include

  int main(void)

  {

  char string[10];

  char *str1 = "abcdefghi";

  strcpy(string, str1);

  printf("%s\n", string);

  return 0;

  }

7、strcspn

  函数名: strcspn

  功 能: 在串中查找第一个给定内容的段

  用 法: int strcspn(char *str1, char *str2);

  程序例:

  #include

  #include

  #include

  int main(void)

  {

  char *string1 = "1234567890";

  char *string2 = "747DC8";

  int length;

  length = strcspn(string1, string2);

  printf("Character where strings intersect is at position %d\n", length);

  return 0;

  }

8、strdup

  函数名: strdup

  功 能: 将串拷贝到新建的位置处

  用 法: char *strdup(char *str);

  程序例:

  #include

  #include

  #include

  int main(void)

  {

  char *dup_str, *string = "abcde";

  dup_str = strdup(string);

  printf("%s\n", dup_str);

  free(dup_str);

  return 0;

  }

9、stricmp

  函数名: stricmp

  功 能: 以大小写不敏感方式比较两个串

  用 法: int stricmp(char *str1, char *str2);

  程序例:

  #include

  #include

  int main(void)

  {

  char *buf1 = "BBB", *buf2 = "bbb";

  int ptr;

  ptr = stricmp(buf2, buf1);

  if (ptr > 0)

  printf("buffer 2 is greater than buffer 1\n");

  if (ptr < 0)

  printf("buffer 2 is less than buffer 1\n");

  if (ptr == 0)

  printf("buffer 2 equals buffer 1\n");

  return 0;

  }

10、strerror

  函数名: strerror

  功 能: 返回指向错误信息字符串的指针

  用 法: char *strerror(int errnum);

  程序例:

  #include

  #include

  int main(void)

  {

  char *buffer;

  buffer = strerror(errno);

  printf("Error: %s\n", buffer);

  return 0;

  }

11、strcmpi

  函数名: strcmpi

  功 能: 将一个串与另一个比较, 不管大小写

  用 法: int strcmpi(char *str1, char *str2);

  程序例:

  #include

  #include

  int main(void)

  {

  char *buf1 = "BBB", *buf2 = "bbb";

  int ptr;

  ptr = strcmpi(buf2, buf1);

  if (ptr > 0)

  printf("buffer 2 is greater than buffer 1\n");

  if (ptr < 0)

  printf("buffer 2 is less than buffer 1\n");

  if (ptr == 0)

  printf("buffer 2 equals buffer 1\n");

  return 0;

  }

  函数名: strncmp

  功 能: 串比较

  用 法: int strncmp(char *str1, char *str2, int maxlen);

  程序例:

  #include

  #include

  int main(void)

  {

  char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc";

  int ptr;

  ptr = strncmp(buf2,buf1,3);

  if (ptr > 0)

  printf("buffer 2 is greater than buffer 1\n");

  else

  printf("buffer 2 is less than buffer 1\n");

  ptr = strncmp(buf2,buf3,3);

  if (ptr > 0)

  printf("buffer 2 is greater than buffer 3\n");

  else

  printf("buffer 2 is less than buffer 3\n");

  return(0);

  }

12、strncpy

  函数名: strncpy

  功 能: 串拷贝

  用 法: char *strncpy(char *destin, char *source, int maxlen);

  程序例:

  #include

  #include

  int main(void)

  {

  char string[10];

  char *str1 = "abcdefghi";

  strncpy(string, str1, 3);

  string[3] = '\0';

  printf("%s\n", string);

  return 0;

  }

13、strnicmp

  函数名: strnicmp

  功 能: 不注重大小写地比较两个串

  用 法: int strnicmp(char *str1, char *str2, unsigned maxlen);

  程序例:

  #include

  #include

  int main(void)

  {

  char *buf1 = "BBBccc", *buf2 = "bbbccc";

  int ptr;

  ptr = strnicmp(buf2, buf1, 3);

  if (ptr > 0)

  printf("buffer 2 is greater than buffer 1\n");

  if (ptr < 0)

  printf("buffer 2 is less than buffer 1\n");

  if (ptr == 0)

  printf("buffer 2 equals buffer 1\n");

  return 0;

  }

14、strnset

  函数名: strnset

  功 能: 将一个字符串前n个字符都设为指定字符

  用 法: char *strnset(char *str, char ch, unsigned n);

  程序例:

  #include

  #include

  int main(void)

  {

  char *string = "abcdefghijklmnopqrstuvwxyz";

  char letter = 'x';

  printf("string before strnset: %s\n", string);

  strnset(string, letter, 13);

  printf("string after strnset: %s\n", string);

  return 0;

  }

15、strpbrk

  函数名: strpbrk

  功 能: 在串中查找给定字符集中的字符

  用 法: char *strpbrk(char *str1, char *str2);

  程序例:

  #include

  #include

  int main(void)

  {

  char *string1 = "abcdefghijklmnopqrstuvwxyz";

  char *string2 = "onm";

  char *ptr;

  ptr = strpbrk(string1, string2);

  if (ptr)

  printf("strpbrk found first character: %c\n", *ptr);

  else

  printf("strpbrk didn't find character in set\n");

  return 0;

  }

16、strrchr

  函数名: strrchr

  功 能: 在串中查找指定字符的最后一个出现

  用 法: char *strrchr(char *str, char c);

  程序例:

  #include

  #include

  int main(void)

  {

  char string[15];

  char *ptr, c = 'r';

  strcpy(string, "This is a string");

  ptr = strrchr(string, c);

  if (ptr)

  printf("The character %c is at position: %d\n", c, ptr-string);

  else

  printf("The character was not found\n");

  return 0;

  }

17、strrev

  函数名: strrev

  功 能: 串倒转

  用 法: char *strrev(char *str);

  程序例:

  #include

  #include

  int main(void)

  {

  char *forward = "string";

  printf("Before strrev(): %s\n", forward);

  strrev(forward);

  printf("After strrev(): %s\n", forward);

  return 0;

  }

18、strset

  函数名: strset

  功 能: 将一个串中的所有字符都设为指定字符

  用 法: char *strset(char *str, char c);

  程序例:

  #include

  #include

  int main(void)

  {

  char string[10] = "123456789";

  char symbol = 'c';

  printf("Before strset(): %s\n", string);

  strset(string, symbol);

  printf("After strset(): %s\n", string);

  return 0;

  }

19、strspn

  函数名: strspn

  功 能: 在串中查找指定字符集的子集的第一次出现

  用 法: int strspn(char *str1, char *str2);

  程序例:

  #include

  #include

  #include

  int main(void)

  {

  char *string1 = "1234567890";

  char *string2 = "123DC8";

  int length;

  length = strspn(string1, string2);

  printf("Character where strings differ is at position %d\n", length);

  return 0;

  }

20、strstr

  函数名: strstr

  功 能: 在串中查找指定字符串的第一次出现

  用 法: char *strstr(char *str1, char *str2);

  程序例:

  #include

  #include

  int main(void)

  {

  char *str1 = "Borland International", *str2 = "nation", *ptr;

  ptr = strstr(str1, str2);

  printf("The substring is: %s\n", ptr);

  return 0;

  }

21、strtod

  函数名: strtod

  功 能: 将字符串转换为double型值

  用 法: double strtod(char *str, char **endptr);

  程序例:

  #include

  #include

  int main(void)

  {

  char input[80], *endptr;

  double value;

  printf("Enter a floating point number:");

  gets(input);

  value = strtod(input, &endptr);

  printf("The string is %s the number is %lf\n", input, value);

  return 0;

  }

22、strtok

  函数名: strtok

  功 能: 查找由在第二个串中指定的分界符分隔开的单词

  用 法: char *strtok(char *str1, char *str2);

  程序例:

  #include

  #include

  int main(void)

  {

  char input[16] = "abc,d";

  char *p;


  p = strtok(input, ",");

  if (p) printf("%s\n", p);


  p = strtok(NULL, ",");

  if (p) printf("%s\n", p);

  return 0;

  }

23、strtol

  函数名: strtol

  功 能: 将串转换为长整数

  用 法: long strtol(char *str, char **endptr, int base);

  程序例:

  #include

  #include

  int main(void)

  {

  char *string = "87654321", *endptr;

  long lnumber;


  lnumber = strtol(string, &endptr, 10);

  printf("string = %s long = %ld\n", string, lnumber);

  return 0;

  }

24、strupr

  函数名: strupr

  功 能: 将串中的小写字母转换为大写字母

  用 法: char *strupr(char *str);

  程序例:

  #include

  #include

  int main(void)

  {

  char *string = "abcdefghijklmnopqrstuvwxyz", *ptr;


  ptr = strupr(string);

  printf("%s\n", ptr);

  return 0;

  }

25、swab

  函数名: swab

  功 能: 交换字节

  用 法: void swab (char *from, char *to, int nbytes);

  程序例:

  #include

  #include

  #include

  char source[15] = "rFna koBlrna d";

  char target[15];

  int main(void)

  {

  swab(source, target, strlen(source));

  printf("This is target: %s\n", target);

  return 0;

  原型:extern char *strstr(char *haystack, char *needle);

  *所在头文件:#include

  *功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。

  *说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。


阅读(1953) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~