现在的位置: 首页 > 综合 > 正文

c核心函数库(3)

2017年12月25日 ⁄ 综合 ⁄ 共 1548字 ⁄ 字号 评论关闭
 

1 char * fgets(char * s,int size,FILE * stream);
 
函数说明  fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。
 
返回值  gets()若成功则返回s指针,返回NULL则表示有错误发生。
 
范例  #include<stdio.h>
main()
{
char s[80];
fputs(fgets(s,80,stdin),stdout);
}
 
执行  this is a test /*输入*/
this is a test /*输出*/
  

注意 fgets(s,BUFSIZ,stdin)我一直没有办法结束它;

2

表头文件  #include <stdlib.h>
 
定义函数  void *calloc(size_t  nmemb,size_t  size);
 
函数说明  calloc()用来配置nmemb个相邻的内存单位,每一单位的大小为size,并返回指向第一个元素的指针。这和使用下列的方式效果相同:malloc(nmemb*size);不过,在利用calloc()配置内存时会将内存内容初始化为0
 
返回值  若配置成功则返回一指针,失败则返回NULL。
 
范例  /* 动态配置10个struct test 空间*/
#include<stdlib.h>
struct test
{
int a[10];
char b[20];
}
main()
{
struct test *ptr=calloc(10,sizeof(struct test));
}

注意 char** lines=calloc(maxline,sizeof(char*));

 

 

 

 

一个关于qsort的例子,注意cmp参数如何

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

#define Maxline 5

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

int main()
{
 int i,nlines;
 char** lines;
 char s[BUFSIZ];

 int maxline=Maxline;
 lines=calloc(maxline,sizeof(char*));

 for (nlines=0;fgets(s,BUFSIZ,stdin);nlines++)
 {
  if (nlines==Maxline)
  {
   char** tlines;
   maxline+=Maxline;
   tlines=realloc(lines,maxline);
   assert(tlines);
   lines=tlines;
  }
  lines[nlines]=malloc(strlen(s)+1);
  assert(lines[nlines]);
  strcpy(lines[nlines],s);
  if(nlines>=3) break;
 }

 qsort(lines,nlines,sizeof(lines[0]),cmp);

 for (i=0;i<nlines;i++)
 {
  fputs(lines[i],stdout);
  fflush(stdout);
  assert(!ferror(stdout));
  free(lines[i]);
 }
 free(lines);

 return 0;
}

int cmp(const void* p1,const void* p2)
{
 const char* sp1=*(const char**)p1;
    const char* sp2=*(const char**)p2;
 return(strcmp(sp1,sp2));
}
 

抱歉!评论已关闭.