# Reading String Input — C Programming

Source: https://www.geekswithgeeks.com/en/c/c-string-input

> scanf's hidden traps, and why fgets is safer.

## scanf("%s", ...) has no limit

`scanf("%s", buf)` reads until whitespace with **no bounds checking** — a long input overflows `buf`. It also stops at the first space, so it can't read full sentences.

## fgets reads a whole line, safely

`fgets` takes a size limit and reads up to a newline, including spaces.

```c
char line[50];
printf("Enter your name: ");
fgets(line, sizeof(line), stdin);

// fgets keeps the trailing '\n' -- strip it:
line[strcspn(line, "\n")] = '\0';
printf("Hi, %s!\n", line);
```

## Mixing scanf and fgets

`scanf("%d", &n)` leaves the trailing `\n` in the input buffer, which a following `fgets` will immediately read as an empty line. Consume it first, e.g. with `getchar()`.
