Parent directory cut-str.c fcrop.c fmt-io.c ncat.c
Download
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char prompt[] = "Give me a line:"; char str[6]; char line[100]; printf("%s\n", prompt); fgets(line, sizeof(line), stdin); printf("Original line read by fgets(): [%s]\n", line); #ifdef CASE1 /* Using snprintf() */ int n = snprintf(str, sizeof(str), "%s", line); printf("Truncated using snprintf(): [%s]\n", str); // snprintf() returns the number of chars it would have printed // (not including the null terminator) if there were no truncation // // Normally this return value isn't very useful, but if you don't use // the return value, the compiler will warn about possible trancation. // Use -Wno-format-truncation compiler flag to disable this warning. // printf("Length of string if it hadn't been truncated: %d\n", n); #endif #ifdef CASE2 /* Using strncpy() INCORRECTLY */ strncpy(str, line, sizeof(str)); printf("Truncated using strncpy(): [%s]\n", str); #endif #ifdef CASE3 /* Using strncpy() correcly */ strncpy(str, line, sizeof(str) - 1); str[sizeof(str) - 1] = '\0'; printf("Truncated using strncpy(): [%s]\n", str); #endif }
#include <stdio.h> #include <stdlib.h> #include <assert.h> int main(int argc, char **argv) { if (argc != 5) { fprintf(stderr, "%s\n", "usage: fcrop <in_file> <bytes_skip> <bytes_write> <out_file>"); exit(1); } FILE *f1 = fopen(argv[1], "rb"); FILE *f2 = fopen(argv[4], "wb"); assert(f1 && f2); int offset = atoi(argv[2]); int length = atoi(argv[3]); assert(offset >= 0 && length > 0); int res = fseek(f1, offset, SEEK_SET); assert(res == 0); char *buf = malloc(length); assert(buf); res = fread(buf, length, 1, f1); assert(res == 1); res = fwrite(buf, length, 1, f2); assert(res == 1); free(buf); fclose(f1); fclose(f2); }
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *s = " \t 0xffffffff \n "; unsigned int u; sscanf(s, "%x", &u); char buf[100]; sprintf(buf, "%u\n", u); printf("%s", buf); snprintf(buf, 5, "%u\n", u); printf("%s", buf); }
/* * ncat <file_name> * * - reads a file line-by-line, printing them out with line numbers */ #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "%s\n", "usage: ncat <file_name>"); exit(1); } char *filename = argv[1]; FILE *fp = fopen(filename, "r"); if (fp == NULL) { perror(filename); exit(1); } char buf[100]; int lineno = 1; while (fgets(buf, sizeof(buf), fp) != NULL) { printf("[%4d]", lineno++); if (fputs(buf, stdout) == EOF) { perror("can't write to stdout"); exit(1); } } if (ferror(fp)) { perror(filename); exit(1); } fclose(fp); return 0; }