alansam

Simple replacement for gets.

Jul 14th, 2021 (edited)
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.94 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. #define SSZ (256)
  5.  
  6. char * getstring(size_t const nr, char string[nr]);
  7. void showstring(size_t const nr, char const string[nr]);
  8.  
  9. int main() {
  10.   printf("Enter a string:\n");
  11.   char string[SSZ] = { 0, };
  12.   getstring(SSZ, string);
  13.  
  14.   puts(string);
  15.   showstring(SSZ, string);
  16.   putchar('\n');
  17.  
  18.   return 0;
  19. }
  20.  
  21. char * getstring(size_t const nr, char string[nr]) {
  22.   string[nr - 1] = '\0';
  23.   for (size_t ix = 0; ix < nr - 1; ++ix) {
  24.     int ch = fgetc(stdin);
  25.     if (ch == '\n' || ch == EOF) {
  26.       string[ix] = '\0';
  27.       break;
  28.     }
  29.     string[ix] = ch;
  30.   }
  31.  
  32.   return string;
  33. }
  34.  
  35. void showstring(size_t const nr, char const string[nr]) {
  36.   for (size_t ix = 0; ix < SSZ - 1; ++ix) {
  37.     int ch = string[ix];
  38.     if (ch == '\0') {
  39.       break;
  40.     }
  41.     else if (isprint(ch)) {
  42.       putchar(ch);
  43.     }
  44.     else {
  45.       printf("\\%03o", ch); // octal non-printable
  46.     }
  47.   }
  48. }
  49.  
Add Comment
Please, Sign In to add comment