string-trunc.c (950B)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <unistd.h> 5 6 int main(int argc, char* argv[]) { 7 if (argc != 3) { 8 printf("Usage: string-trunc <length> <suffix>\n"); 9 return 1; 10 } 11 12 int length = atoi(argv[1]); 13 if (length == 0) { 14 printf("Usage: string-trunc <length> <suffix>\n"); 15 return 1; 16 } 17 char* suffix = argv[2]; 18 19 char buffer[length+5]; 20 memset(buffer, 0, sizeof(buffer)); 21 22 while(fgets(buffer, sizeof(buffer), stdin) != NULL) { 23 24 // https://stackoverflow.com/questions/59847042/how-to-read-only-first-n-characters-from-each-line-in-c-language/59847195#59847195 25 char* p = strchr(buffer, '\n'); 26 if (!p) { 27 fscanf(stdin, "%*[^\n]\n"); 28 } else { 29 *p = '\0'; 30 } 31 32 if (strlen(buffer) >= length) { 33 char truncated[length+5]; 34 memset(truncated, 0, sizeof(truncated)); 35 strncpy(truncated, buffer, length-strlen(suffix)); 36 printf("%s%s\n", truncated, suffix); 37 } else { 38 printf("%s\n", buffer); 39 } 40 } 41 }