- 论坛徽章:
- 0
|
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; }
|
|