免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 987 | 回复: 0
打印 上一主题 下一主题

第五周: C语言 标准函数库 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:41 |只看该作者 |倒序浏览
1. 老师代码:
1)mycp.c

#include <stdio.h>

#define BUFSIZE 32

int main(int argc, char **argv)
{
      FILE *fps, *fpd;
      char buf[BUFSIZE];
      int retr, retw, ret;

      if (argc != 3) {
        fprintf(stderr, "argment...\n");
        return 1;
      }

      fps = fopen(argv[1], "rb");
      if (fps == NULL) {
        perror(argv[1]);
        return 1;
      }
      fpd = fopen(argv[2], "wb");
      if (fpd == NULL) {
        perror(argv[2]);
        fclose(fps);
        return 1;
      }

      while (1) {
        retr = fread(buf, 1, BUFSIZE, fps);
        if (retr == 0) {
          if (ferror(fps)) {
            fprintf(stderr, "read error.\n");
          }
          break;
        }

        retw = 0;
        while (retw < retr) {
          ret = fwrite(buf + retw, 1, retr - retw, fpd);
          /* if error */
          retw += ret;
        }
      }

      fclose(fpd);
      fclose(fps);

      return 0;
}

2) realloc.c
#include <stdio.h>
#include <stdlib.h>

#define NAMESIZE 32
struct score {
      int id;
      char name[NAMESIZE];
      int math;
};

int insert(struct score **arr, int *num, struct score *data)
{
      void *tmp;

      tmp = realloc(*arr, (*num + 1) * sizeof(struct score));
      if (tmp == NULL) {
        return -1;
      }
      *arr = tmp;

      (*arr)[*num] = *data;
      (*num)++;

      return 0;
}

int main(void)
{
      struct score tmp;
      int i;
      struct score *arr = NULL;
      int num = 0;

      for (i = 0; i < 5; i++) {
        tmp.id = i;
        tmp.math = 100 - i;
        snprintf(tmp.name, NAMESIZE, "stu%d", i);

        insert(&arr, &num, &tmp);
      }

      for (i = 0; i < num; i++) {
        printf("%d %s %d\n", arr[i].id, arr[i].name, arr[i].math);
      }

      free(arr);

      return 0;
}

3) string.c
#include <stdio.h>
#include <string.h>

char *mystrcpy(char *dest, const char *src)
{
      char *save = dest;

      while (*dest++ = *src++)
        ;

      return save;
}

char *mystrcat(char *dest, const char *src)
{
      int i;

      for (i = 0; dest[i] != '\0'; i++)
        ;
      while (dest[i++] = *src++)
        ;

      return dest;
}

int mystrcmp(const char *s1, const char *s2)
{
      int i;

      for (i = 0; s1[i] != '\0' && s1[i] == s2[i]; i++)
        ;

      return s1[i] - s2[i];
}

void *mymemcpy(void *dest, const void *src, size_t n)
{
      char *d = dest;
      const char *s = src;
      int i;

      for (i = 0; i < n; i++) {
        d[i] = s[i];
      }

      return dest;
}

void *mymemmove(void *dest, const void *src, size_t n)
{
      char *d = dest;
      const char *s = src;
      int i;

      if (s > d) {
        for (i = 0; i < n; i++) {
          d[i] = s[i];
        }
      } else {
        for (i = n - 1; i >= 0; i--) {
          d[i] = s[i];
        }
      }

      return dest;
}

int main(void)
{
      char dest[64] = "1234567890abcdefghijklmnopqrstuvwxyz";
      char *src = "5678";
      int i;

      //mystrcpy(dest, src);
      //printf("%s\n", strcpy(dest, src));
      //printf("%d\n", mystrcmp(dest, src));
      mymemmove(dest + 5, dest, 10);
      printf("%s\n", strstr(dest, src));

#if 0
      mymemcpy(dest, src, 16);
      for (i = 0; i < 16; i++) {
        printf("%x ", (unsigned)dest[i]);
      }
      printf("\n");
#endif
      return 0;
}

4)exit.c
#include <stdio.h>
#include <stdlib.h>


void bar1(void)
{
}

void bar2(void)
{
}

void bar3(void)
{
}

void bar4(void)
{
}
void foo()
{
}

int main(void)
{
atexit(bar1);
atexit(bar2);
atexit(bar1);
atexit(bar3);
printf("hello\n");
//abort();
printf("world\n");
return 123;
foo();
}

5) fflush()函数
int main(void)
{
printf("hello");
fflush(stdout);
*(int *) 3 =6;
return 0;
}

6)_Exit(145) , exit(), atexit(), abort()函数
7) bsearch()函数
8)memcpy(),memchr(),memmove

mymemmove.c
#include <stdio.h>
#include <stdlib.h>

void *mymemmove(void *dest, const void *sorce, size_t n)
{
    char *dst = (char *)dest;
    const char *src = (char *)sorce;
    int i;
    if((src - dst) <= 0)
    {
    for(i=n-1;i>=0;i--)
        *(dst+i)=*(src+i);
    }else
    {
    for(i=0;i<n;i++)
        *(dst+i) = *(src+i);
    }
    return dst;
}

main(void)
{
    int i;
    char name1[]="hello,world,who are you???";
    char name2[]="     naitao,Iamyep,AreyouOK?";
    printf("%s\n",name1);
    mymemmove(name1+5,name1,10);
    printf("%s\n",name1);
    
    printf("%s\n",name2);
    mymemmove(name2,name2+5,10);
    printf("%s\n",name2);

}

2.作业:
1) realloc.c

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

#define MAX    5
#define SIZE    20
struct score{
    char name[SIZE];
    int id;
    int score;
};

int insert(struct score **stu, int *num, struct score *data)
{
    void *temp;
    //printf("hello\n");
    temp = realloc(*stu, sizeof(struct score) * (*num + 1));
    if(temp == NULL)
        return -1;
    else
        (*stu)=temp;
//    printf("data->name: %s\n",data->name);
    (*stu)[*num] = *data; //whole struct copying
    (*num)++;
    
    return 0;
}

int delete(struct score **stu, int *num, int id)
{
    int i;
    int j;
    void *temp;
    for(i=0;i < *num;i++)
    {
        if(id == (*stu)[i].id)
        {
            if(*num == 1)
            {
                *stu = NULL;
                return 0;
            }

            for(j=i;j<*num-1;j++)
                (*stu)[j]=(*stu)[j+1];
            temp = realloc(*stu, sizeof(struct score) * (*num -1));
            if(temp == NULL)
                return -1;
            else
            {
                (*num)--;
                return 0;
            }
        }
    }
    return -1;
}

int main(void)
{
    int num=0;
    struct score *stu = NULL;
    struct score data;
    int i;
    int id;
    for(i=0;i<MAX;i++)
    {
        snprintf(data.name, SIZE, "student_%d\0", i);
        data.id = i;
        data.score = 95+i;
        insert(&stu, &num, &data);
    }
    while(stu != NULL)
    {
    for(i=0;i<MAX;i++)
        printf("name:%s id: %d score:%d\n",stu[i].name, stu[i].id, stu[i].score);
    scanf("%d", &id);
    delete(&stu, &num, id);
    }
    return 0;
}

2) search_tcp.c 查看 某文件含有某字符串的个数:

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

#define BUFSIZE    100

int search_tcp(char *path, char *str)
{
    int i;
    int count=0;
    int my_count = 0;
    int strsize=0;
    char *p;
    FILE *fp;
    char buffer[BUFSIZE];
    
    while(str[strsize++] != '\0');


    fp=fopen(path,"r");
    while(fgets(buffer,BUFSIZE,fp)!=NULL)
    {
    //    printf("%s",buffer);
        for(i=0;i<BUFSIZE;i++)
            buffer[i]=tolower(buffer[i]);
        
        p = buffer;
        my_count = 0;
        while((p=strstr(p,str))!=NULL)
        {
            p += strsize;

            my_count++;
            count++;

            if(isalpha(*(p-strsize-1)) || isalpha(*(p-1)))
            {
                my_count--;
                count--;
            }
        
        }
    //    printf("%s",buffer);
    //    printf("\n\t\t\t\t\t\t\t\t\t\t\t:mycount = %d\n",my_count);
        
    }
    return count;

}

int main(int argc, char **argv)
{
    int count;
    if(argc < 2)
    {
        printf("Usage: %s [/path/name]  [substring]\n",argv[0]);
        return -1;
    }

    count = search_tcp(argv[1],argv[2]);
    printf("%d TCP was found!\n",count);
    return 0;
}

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP