- 1 1. āļāļāļāļģ
- 2 2. Standard Input āļāļ·āļāļāļ°āđāļĢ
- 3 3. āļāļ·āđāļāļāļēāļāļāļēāļĢāđāļāđ Standard Input āđāļāļ āļēāļĐāļē C
- 4 4. āļāļēāļĢāđāļāļĩāļĒāļ Standard Input āļāļĩāđāļāļĨāļāļāļ āļąāļĒ
- 4.1 āļāļēāļĢāļāđāļāļāļāļąāļ Buffer Overflow
- 4.2 āđāļāđ fgets āđāļāļ·āđāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ
- 4.3 āļāļēāļĢāļāļĢāļ§āļāļŠāļāļāļāļ§āļēāļĄāļāļđāļāļāđāļāļāļāļāļāļāđāļāļĄāļđāļĨāļāļģāđāļāđāļē
- 4.4 āđāļāļ§āļāļēāļāļāļĩāđāļāļĩāļāļĩāđāļŠāļļāļāđāļāļāļēāļĢāļāļąāļāļāļēāļĢ Error
- 4.5 āļŠāļĢāļļāļāļ§āļīāļāļĩāļāļēāļĢāļĢāļąāļ Input āļāļĒāđāļēāļāļāļĨāļāļāļ āļąāļĒ
- 5 5. āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨ Standard Input āļāļąāđāļāļŠāļđāļ
- 5.1 āļāļēāļĢāļĢāļąāļāļāđāļāļĄāļđāļĨāļŦāļĨāļēāļĒāļāđāļēāļāļĢāđāļāļĄāļāļąāļ
- 5.2 āļāļēāļĢāļāļąāļāļāļēāļĢ Input āļāļĩāđāļĄāļĩāļāđāļāļāļ§āđāļēāļāļŦāļĢāļ·āļāļāļēāļĢāļāļķāđāļāļāļĢāļĢāļāļąāļāđāļŦāļĄāđ
- 5.3 āļāļēāļĢāļāļąāļāļāļēāļĢ Input āļŦāļĨāļēāļĒāļāļĢāļĢāļāļąāļ
- 5.4 āļāļēāļĢāļāļąāļāļāļēāļĢ Input āđāļāļāđāļāļāļēāļĄāļīāļ
- 5.5 āļŠāļĢāļļāļ
- 6 6. āļāļąāļāļŦāļēāļāļĩāđāļāļāļāđāļāļĒāđāļĨāļ°āļ§āļīāļāļĩāđāļāđāđāļ
- 6.1 āļāļąāļāļŦāļēāđāļĨāļ°āļ§āļīāļāļĩāđāļāđāđāļāļāļāļ scanf
- 6.2 āļāļąāļāļŦāļēāđāļĨāļ°āļ§āļīāļāļĩāđāļāđāđāļāļāļāļ fgets
- 6.3 āļāļēāļĢāļāļąāļāļāļēāļĢ Input āļāļĩāđāđāļĄāđāļāļđāļāļāđāļāļ
- 6.4 āļāļąāļāļŦāļēāđāļāļĩāđāļĒāļ§āļāļąāļāļāļēāļĢāļāđāļēāļāļŦāļĨāļēāļĒāļāļĢāļĢāļāļąāļ
- 6.5 āļŠāļĢāļļāļ
- 7 7. āļāļąāļ§āļāļĒāđāļēāļāđāļāļĢāđāļāļĢāļĄāļāļĩāđāđāļāđ Standard Input
- 7.1 āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđ 1: āļāļģāļāļ§āļāļāļĨāļĢāļ§āļĄāđāļĨāļ°āļāđāļēāđāļāļĨāļĩāđāļĒ
- 7.2 āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđ 2: āđāļāļĢāđāļāļĢāļĄāļāļĢāļ§āļāļŠāļāļāļāļģāļāļĨāļąāļ (Palindrome)
- 7.3 āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđ 3: āđāļāļĢāđāļāļĢāļĄāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāļĢāļđāļāđāļāļ CSV
- 7.4 āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđ 4: āđāļāļĢāđāļāļĢāļĄāđāļāđāļāļāļ (Interactive) āļāļĩāđāļĢāļąāļ Input āļŦāļĨāļēāļĒāļāļĢāļąāđāļ
- 7.5 āļŠāļĢāļļāļ
- 8 8. āļāļāļŠāļĢāļļāļ
- 8.1 āļāļāļāļ§āļāļāļ§āļēāļĄāļŠāļģāļāļąāļāļāļāļ Standard Input
- 8.2 āļāļļāļāļŠāļģāļāļąāļāđāļāļāļēāļĢāđāļāļĩāļĒāļ Input āļāļĩāđāļāļĨāļāļāļ āļąāļĒāđāļĨāļ°āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ
- 8.3 āļāļąāđāļāļāļāļāļāđāļāđāļ
- 8.4 āļāđāļāļāļ§āļēāļĄāļāļķāļāļāļđāđāļāđāļēāļ
1. āļāļāļāļģ
āđāļāļāļēāļĢāđāļĢāļĩāļĒāļāļĢāļđāđāļ āļēāļĐāļē C āļāļąāļāļāđāļāļąāļ âStandard Inputâ āļāļ·āļāđāļāđāļāļŠāļīāđāļāļŠāļģāļāļąāļāļāļĩāđāļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļāđāļĄāđāđāļāđ āļāļēāļĢāđāļāđāļēāđāļāđāļĨāļ°āļāļąāļāļāļēāļĢ Standard Input āļāļĒāđāļēāļāļāļđāļāļāđāļāļāđāļĨāļ°āļāļĨāļāļāļ āļąāļĒ āļāļ°āļāđāļ§āļĒāđāļāļīāđāļĄāļāļ§āļēāļĄāļĒāļ·āļāļŦāļĒāļļāđāļāđāļĨāļ°āļāļ§āļēāļĄāļāđāļēāđāļāļ·āđāļāļāļ·āļāļāļāļāđāļāļĢāđāļāļĢāļĄāđāļāđāļāļĒāđāļēāļāļĄāļēāļ
āļāļāļāļ§āļēāļĄāļāļĩāđāļāļ°āļāļāļīāļāļēāļĒāđāļāļīāļāļĢāļ°āļāļāļāļąāđāļāđāļāđāļāļ·āđāļāļāļēāļāļāļāļāļķāļāļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđāđāļāđ Standard Input āđāļāļ āļēāļĐāļē C āļāļĢāđāļāļĄāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ āđāļāļ·āđāļāđāļŦāđāļāļđāđāđāļĢāļīāđāļĄāļāđāļāļŠāļēāļĄāļēāļĢāļāļāļģāļāļ§āļēāļĄāđāļāđāļēāđāļāđāļāđāļāđāļēāļĒ āđāļĨāļ°āļāļģāđāļāđāļāđāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļāļāļāļāđāļāļ
āļāļ§āļēāļĄāļŠāļģāļāļąāļāļāļāļ Standard Input
Standard Input āļāļ·āļāļāļĨāđāļāļāļ·āđāļāļāļēāļāļāļĩāđāđāļāļĢāđāļāļĢāļĄāđāļāđāđāļāļāļēāļĢāļĢāļąāļāļāđāļāļĄāļđāļĨāļāļēāļāļ āļēāļĒāļāļāļ āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ āđāļāđāđāļāļŠāļāļēāļāļāļēāļĢāļāđāļāļąāļāļāļĩāđ:
- āđāļāļāļāļĨāļīāđāļāļāļąāļāļāļģāļāļ§āļāļāļĩāđāđāļāđāļāđāļēāļāļąāļ§āđāļĨāļāļāļĩāđāļāļđāđāđāļāđāļāđāļāļ
- āļāļąāļāļāđāļāļąāļāļāđāļāļŦāļēāļāļĩāđāđāļāđāļāđāļāļāļ§āļēāļĄ
- āđāļāļĢāđāļāļĢāļĄāļāļĩāđāļāļģāļāļēāļāđāļāļāđāļāļāļēāļĄāļīāļāļāļēāļĄāļāļģāļŠāļąāđāļāļāļēāļ Command Line
āđāļāļāļĢāļāļĩāđāļŦāļĨāđāļēāļāļĩāđ āļāļēāļĢāļāļąāļāļāļēāļĢ Standard Input āļāļĒāđāļēāļāļāļđāļāļāđāļāļ āļāļ°āļāđāļ§āļĒāđāļŦāđāļŠāļĢāđāļēāļāđāļāļĢāđāļāļĢāļĄāļāļĩāđāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļĨāļ°āļāļĨāļāļāļ āļąāļĒāļĄāļēāļāļāļķāđāļ
āļŠāļīāđāļāļāļĩāđāļāļ°āđāļāđāđāļĢāļĩāļĒāļāļĢāļđāđāļāļēāļāļāļāļāļ§āļēāļĄāļāļĩāđ
āļāļāļāļ§āļēāļĄāļāļĩāđāļāļ°āļāļĢāļāļāļāļĨāļļāļĄāđāļāļ·āđāļāļŦāļēāļāļąāļāļāđāļāđāļāļāļĩāđ:
- āļāļĨāđāļāļāļ·āđāļāļāļēāļāļāļāļ Standard Input āđāļĨāļ°āļ§āļīāļāļĩāļāļēāļĢāđāļāđāļāļēāļāđāļāļ āļēāļĐāļē C
- āļāļēāļĢāđāļāđāļāļąāļāļāđāļāļąāļ
scanf
āđāļĨāļ°fgets
- āļāļēāļĢāđāļāļĩāļĒāļ Standard Input āļāļĩāđāļāļĨāļāļāļ āļąāļĒāđāļĨāļ°āļāđāļēāđāļāļ·āđāļāļāļ·āļ
- āđāļāļāļāļīāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāļāļąāđāļāļŠāļđāļ
- āļāļąāļāļŦāļēāļāļĩāđāļāļāļāđāļāļĒāđāļĨāļ°āļ§āļīāļāļĩāđāļāđāđāļ
āļāļđāđāļāđāļēāļāđāļāđāļēāļŦāļĄāļēāļĒ
- āļāļđāđāđāļĢāļīāđāļĄāļāđāļāļāļĩāđāļāļģāļĨāļąāļāđāļĢāļĩāļĒāļāļĢāļđāđāļ āļēāļĐāļē C
- āđāļāļĢāđāļāļĢāļĄāđāļĄāļāļĢāđāļāļĩāđāļĒāļąāļāđāļĄāđāļĄāļąāđāļāđāļāđāļāļāļēāļĢāđāļāđ Standard Input
- āļāļđāđāļāļĩāđāļāđāļāļāļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄāđāļŦāđāļĄāļĩāļāļēāļĢāļāļąāļāļāļēāļĢāļāđāļāļĄāļđāļĨāļāļģāđāļāđāļēāļāļĩāđāļāļĨāļāļāļ āļąāļĒāđāļĨāļ°āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ
2. Standard Input āļāļ·āļāļāļ°āđāļĢ
āđāļāļ āļēāļĐāļē C, Standard Input āļāļ·āļāļāļĨāđāļāļāļ·āđāļāļāļēāļāļāļĩāđāđāļāļĢāđāļāļĢāļĄāđāļāđāđāļāļāļēāļĢāļĢāļąāļāļāđāļāļĄāļđāļĨāļāļēāļāļ āļēāļĒāļāļāļ āļāļķāđāļāđāļāđāļāļŠāđāļ§āļāļŦāļāļķāđāļāļāļāļ âStandard I/Oâ āđāļāļĒāļāļāļāļīāļāļ°āļĢāļąāļāļāđāļāļĄāļđāļĨāļāđāļēāļ Terminal āļŦāļĢāļ·āļ Command Line āļŠāđāļ§āļāļāļĩāđāļāļ°āļāļāļīāļāļēāļĒāđāļāļ§āļāļīāļāđāļĨāļ°āļāļāļāļēāļāļāļāļ Standard Input
āļāļģāļāļģāļāļąāļāļāļ§āļēāļĄāļāļāļ Standard Input
Standard Input (stdin) āļāļ·āļ Data Stream āļāļĩāđāđāļāđāļŠāļģāļŦāļĢāļąāļāļĢāļąāļāļāđāļāļĄāļđāļĨāļāļēāļāļ āļēāļĒāļāļāļ āđāļāļ āļēāļĐāļē C āļŠāļēāļĄāļēāļĢāļāļāļąāļāļāļēāļĢāđāļāđāļāđāļēāļĒāļāđāļēāļāđāļĨāļāļĢāļēāļĢāļĩ stdio.h
- āđāļāļĒāļāļąāđāļ§āđāļ āļāđāļāļĄāļđāļĨāļāļ°āļāļđāļāļāđāļāļāļāļēāļāđāļāđāļāļāļīāļĄāļāđ
- āļāđāļāļĄāļđāļĨāļāļĩāđāļĢāļąāļāđāļāđāļēāļĄāļēāļāļ°āļāļđāļāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļāđāļāļĢāđāļāļĢāļĄ āđāļĨāļ°āļŠāđāļāļāļĨāļĨāļąāļāļāđāļāļāļāđāļāļĒāļąāļ Standard Output
āđāļāļĢāļāļŠāļĢāđāļēāļ Standard I/O
āđāļāļ āļēāļĐāļē C āļāļ°āļĄāļĩ Standard Stream 3 āļāļĢāļ°āđāļ āļāļŦāļĨāļąāļāļāļąāļāļāļĩāđ:
- Standard Input (stdin): āđāļāđāļŠāļģāļŦāļĢāļąāļāļĢāļąāļāļāđāļāļĄāļđāļĨāļāļēāļāļ āļēāļĒāļāļāļ
- Standard Output (stdout): āđāļāđāļŠāļģāļŦāļĢāļąāļāđāļŠāļāļāļāļĨāļĨāļąāļāļāđāļāļāļāđāļāļĢāđāļāļĢāļĄ
- Standard Error Output (stderr): āđāļāđāļŠāļģāļŦāļĢāļąāļāđāļŠāļāļāļāđāļāļāļ§āļēāļĄ Error
āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāļīāļ
āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđāđāļāđāļāđāļāļĢāđāļāļĢāļĄāļāđāļēāļĒāđ āļāļĩāđāļĢāļąāļāļāđāļēāļāļąāļ§āđāļĨāļāļāļēāļ Standard Input āđāļĨāļ°āđāļŠāļāļāļāļĨāļāļēāļ Standard Output
#include <stdio.h>
int main() {
int number;
printf("āļāļĢāļļāļāļēāļāđāļāļāļāļąāļ§āđāļĨāļ: ");
scanf("%d", &number); // āļāđāļēāļāļāđāļēāļāļģāļāļ§āļāđāļāđāļĄāļāļēāļ Standard Input
printf("āļāđāļēāļāļĩāđāļāđāļāļāļāļ·āļ: %d\n", number); // āđāļŠāļāļāļāļĨāļāļāļāļāļēāļ Standard Output
return 0;
}
āļāļāļāļēāļāđāļĨāļ°āļāļ§āļēāļĄāļŠāļģāļāļąāļāļāļāļ Standard Input
Standard Input āļāļđāļāđāļāđāļāļēāļāđāļāđāļāļĢāđāļāļĢāļĄāļĨāļąāļāļĐāļāļ°āļāđāļēāļāđ āđāļāđāļ:
- āđāļāļĢāđāļāļĢāļĄāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨ: āļāđāļāļāļāļąāļ§āđāļĨāļāļŦāļĢāļ·āļāļāđāļāļāļ§āļēāļĄāđāļāļ·āđāļāļāļģāđāļāļāļģāļāļ§āļāļŦāļĢāļ·āļāļ§āļīāđāļāļĢāļēāļ°āļŦāđ
- āđāļāļāļāļĨāļīāđāļāļāļąāļāđāļāļ Interactive: āļĢāļąāļāļāļģāļŠāļąāđāļāļāļēāļāļāļđāđāđāļāđāđāļāļ·āđāļāđāļāļĨāļĩāđāļĒāļāļāļēāļĢāļāļģāļāļēāļāļāļāļāđāļāļĢāđāļāļĢāļĄ
- āļāļēāļĢāļāļąāļāļāļēāļĢāļāđāļāļĄāļđāļĨāđāļāļāđāļāļāļēāļĄāļīāļ: āđāļāđāļāđāļāļĄāļđāļĨāļāļĩāđāļāļđāđāđāļāđāļāđāļāļāđāļāļ·āđāļāļāļģāđāļāļīāļāļāļēāļĢāđāļāļ Real-time
āļāđāļāļāļĩāļāļāļ Standard Input
- āļāļ§āļēāļĄāļĒāļ·āļāļŦāļĒāļļāđāļ: āļĢāļāļāļĢāļąāļāļāļēāļĢāļāđāļāļāļāđāļāļĄāļđāļĨāļāļēāļāđāļāđāļāļāļīāļĄāļāđ, Pipe āļŦāļĢāļ·āļ Redirection
- āļāļ§āļēāļĄāļŠāļ°āļāļ§āļ: āđāļāđāļāļąāļāļāđāļāļąāļāđāļāļāļąāļ§āđāļāđāļ
scanf
āđāļĨāļ°fgets
āđāļāļ·āđāļāļāļąāļāļāļēāļĢāļāđāļāļĄāļđāļĨāđāļāđāļāđāļēāļĒ
3. āļāļ·āđāļāļāļēāļāļāļēāļĢāđāļāđ Standard Input āđāļāļ āļēāļĐāļē C
āļ āļēāļĐāļē C āļĄāļĩāļāļąāļāļāđāļāļąāļāļŦāļĨāļēāļĒāļāļąāļ§āļāļĩāđāđāļāđāļĢāļąāļāļāđāļāļĄāļđāļĨāļāļēāļāļāļđāđāđāļāđāļāđāļēāļ Standard Input āļāļĩāđāđāļāđāļāđāļāļĒāļāļĩāđāļŠāļļāļāļāļ·āļ scanf
āđāļĨāļ° fgets
āļŠāđāļ§āļāļāļĩāđāļāļ°āđāļāļ°āļāļģāļ§āļīāļāļĩāđāļāđāļāļēāļāđāļĨāļ°āļāļļāļāļŠāļĄāļāļąāļāļīāļāļāļāđāļāđāļĨāļ°āļāļąāļāļāđāļāļąāļāļāļĢāđāļāļĄāļāļąāļ§āļāļĒāđāļēāļ
āļāļēāļĢāđāļāđāļāļąāļāļāđāļāļąāļ scanf
scanf
āđāļāđāđāļāļāļēāļĢāļāđāļēāļāļāđāļāļĄāļđāļĨāļāļēāļĄ Format āļāļĩāđāļāļģāļŦāļāļāđāļĨāļ°āđāļāđāļāđāļ§āđāđāļāļāļąāļ§āđāļāļĢ
āđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļ
int scanf(const char *format, ...);
format
: String āļāļĩāđāļĢāļ°āļāļļāļĢāļđāļāđāļāļāļāļāļāļāđāļāļĄāļđāļĨ...
: Address āļāļāļāļāļąāļ§āđāļāļĢāļāļĩāđāđāļāđāļāļāđāļēāļāļĩāđāļāđāļāļāđāļāđāļēāļĄāļē
Specifier āļāļĩāđāđāļāđāļāđāļāļĒ
Specifier | āļāļģāļāļāļīāļāļēāļĒ | āļāļąāļ§āļāļĒāđāļēāļ |
---|---|---|
%d | āļāļģāļāļ§āļāđāļāđāļĄ (Integer) | 42 |
%f | āļāļģāļāļ§āļāļāļĻāļāļīāļĒāļĄ (Float) | 3.14 |
%c | āļāļąāļāļāļĢāļ° 1 āļāļąāļ§ | A |
%s | āļŠāļāļĢāļīāļ (String) | Hello |
āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāđāļāļēāļ
#include <stdio.h>
int main() {
int age;
printf("āļāļĢāļļāļāļēāļāđāļāļāļāļēāļĒāļļ: ");
scanf("%d", &age); // āļāđāļēāļāļāđāļēāļāļģāļāļ§āļāđāļāđāļĄ
printf("āļāļēāļĒāļļāļāļĩāđāļāđāļāļāļāļ·āļ: %d\n", age);
return 0;
}
āļāđāļāļāļ§āļĢāļĢāļ°āļ§āļąāļ
- āļŦāļēāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāđāļāļāļĄāļēāđāļĄāđāļāļĢāļāļāļąāļ Format āļāļ°āđāļāļīāļ Error
- āđāļāļ·āđāļāļāđāļāļāļāļąāļ Buffer Overflow āļāļ§āļĢāļāļģāļŦāļāļāļāļāļēāļāļāļēāļĢāļāđāļēāļ āđāļāđāļ
%s
āļāļēāļĢāđāļāđāļāļąāļāļāđāļāļąāļ fgets
fgets
āđāļāđāļŠāļģāļŦāļĢāļąāļāļāđāļēāļ String āđāļāļāļāļĩāļĨāļ°āļāļĢāļĢāļāļąāļ āđāļĨāļ°āļāļ·āļāļ§āđāļēāļāļĨāļāļāļ āļąāļĒāļāļ§āđāļē scanf
āđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļ
char *fgets(char *str, int n, FILE *stream);
str
: Array āļāļĩāđāđāļāđāđāļāđāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāđāļēāļāļĄāļēn
: āļāļģāļāļ§āļāļāļąāļāļāļĢāļ°āļŠāļđāļāļŠāļļāļāļāļĩāđāļāđāļēāļāđāļāđ (āļĢāļ§āļĄ ‘\0’)stream
: āđāļŦāļĨāđāļāļāđāļāļĄāļđāļĨ (āļāļāļāļīāļāļ·āļstdin
)
āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāđāļāļēāļ
#include <stdio.h>
int main() {
char name[50];
printf("āļāļĢāļļāļāļēāļāđāļāļāļāļ·āđāļ: ");
fgets(name, 50, stdin); // āļāđāļēāļāđāļāđāļŠāļđāļāļŠāļļāļ 49 āļāļąāļ§āļāļąāļāļĐāļĢ
printf("āļāļ·āđāļāļāļĩāđāļāđāļāļāļāļ·āļ: %s", name);
return 0;
}
āļāđāļāļāļ§āļĢāļĢāļ°āļ§āļąāļ
- āļāđāļēāļāđāļāļĄāļđāļĨāļāļĩāđāļāđāļāļāļĒāļēāļ§āđāļāļīāļ Buffer āļŠāđāļ§āļāļāļĩāđāđāļāļīāļāļāļ°āļāļđāļāļāļąāļāļāļīāđāļ
- āļāļēāļāļĄāļĩāļāļąāļāļāļĢāļ° ‘\n’ āļāļĒāļđāđāđāļ String āļāđāļāļāļĨāļāļāļāļāđāļāļ
āļ§āļīāļāļĩāļĨāļāļāļąāļāļāļĢāļ°āļāļķāđāļāļāļĢāļĢāļāļąāļāđāļŦāļĄāđ
name[strcspn(name, "\n")] = '\0';
āļāļēāļĢāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāļĢāļ°āļŦāļ§āđāļēāļ scanf
āđāļĨāļ° fgets
āļāļļāļāļŠāļĄāļāļąāļāļī | scanf | fgets |
---|---|---|
āļāļēāļĢāđāļāđāļāļēāļ | āļāđāļēāļāļāđāļēāļāļēāļĄāļĢāļđāļāđāļāļāļāļĩāđāļāļģāļŦāļāļ (āļāļąāļ§āđāļĨāļ/āļāđāļāļāļ§āļēāļĄ) | āļāđāļēāļ String āļāļĩāļĨāļ°āļāļĢāļĢāļāļąāļ |
āļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ | āļĄāļĩāļāļ§āļēāļĄāđāļŠāļĩāđāļĒāļ Buffer Overflow | āļāļ§āļāļāļļāļĄāļāļāļēāļ Buffer āđāļāđ |
āļāļ§āļēāļĄāļĒāļ·āļāļŦāļĒāļļāđāļ | āļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļ Format āđāļāđ | āļāđāļēāļāļāđāļāļĄāļđāļĨāļāļąāđāļāļŦāļĄāļāđāļāđāļ String |
āļāļ§āļĢāđāļĨāļ·āļāļāđāļāđāđāļāļāđāļ?
- āđāļāđ
scanf
: āđāļĄāļ·āđāļāļāļĒāļēāļāđāļāđāļāđāļēāļāļąāļ§āđāļĨāļāļŦāļĢāļ·āļāļāđāļāļĄāļđāļĨāļāļĩāđāļĄāļĩāļĢāļđāļāđāļāļāđāļāļāļēāļ° - āđāļāđ
fgets
: āđāļĄāļ·āđāļāļāđāļāļāļāļēāļĢāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ āđāļĨāļ°āļāļąāļāļāļēāļĢ String āļāļĩāđāļĒāļēāļ§āļŦāļĢāļ·āļāļāļąāļāļāđāļāļ
4. āļāļēāļĢāđāļāļĩāļĒāļ Standard Input āļāļĩāđāļāļĨāļāļāļ āļąāļĒ
āļāļēāļĢāļāļąāļāļāļēāļĢ Standard Input āđāļāļ āļēāļĐāļē C āļāļĒāđāļēāļāļāļĨāļāļāļ āļąāļĒāđāļāđāļāļŠāļīāđāļāļŠāļģāļāļąāļāļĄāļēāļ āđāļāļĢāļēāļ°āļāļēāļĢāļĢāļąāļāļāđāļāļĄāļđāļĨāđāļĄāđāļāļđāļāļāđāļāļāļāļēāļāļāļģāđāļŦāđāđāļāļīāļ Buffer Overflow āļŦāļĢāļ·āļ Undefined Behavior āđāļāđ āļŠāđāļ§āļāļāļĩāđāļāļ°āļāļāļīāļāļēāļĒāļ§āļīāļāļĩāđāļāļĩāļĒāļāļāļĩāđāļāļĨāļāļāļ āļąāļĒāļāļĢāđāļāļĄāļāļąāļ§āļāļĒāđāļēāļ
āļāļēāļĢāļāđāļāļāļāļąāļ Buffer Overflow
scanf
āđāļāđāļāđāļēāļĒ āđāļāđāļŦāļēāļāđāļĄāđāļāļģāļāļąāļāļāļāļēāļāļāļēāļĢāļāđāļāļ āļāļēāļāđāļāļīāļ Buffer Overflow
āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāļāļģāļāļąāļāļāļāļēāļ
#include <stdio.h>
int main() {
char input[10];
printf("āļāļĢāļļāļāļēāļāđāļāļāļāđāļāļāļ§āļēāļĄ (āļŠāļđāļāļŠāļļāļ 9 āļāļąāļ§āļāļąāļāļĐāļĢ): ");
scanf("%9s", input); // āļāļģāļāļąāļāļŠāļđāļāļŠāļļāļ 9 āļāļąāļ§āļāļąāļāļĐāļĢ
printf("āļāđāļāļāļ§āļēāļĄāļāļĩāđāļāđāļāļāļāļ·āļ: %s\n", input);
return 0;
}
āļāđāļāļŠāļģāļāļąāļ
- āļāļģāļŦāļāļāļāļāļēāļāđāļ Format āđāļāđāļ
%9s
āđāļāļ·āđāļāđāļĄāđāđāļŦāđāļāđāļēāļāđāļāļīāļāļāļāļēāļ Array
āđāļāđ fgets
āđāļāļ·āđāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ
fgets
āļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļāļāļģāļāļ§āļāļāļąāļāļāļĢāļ°āļāļĩāđāļāđāļēāļāđāļāđ āļāļķāļāļāđāļ§āļĒāļĨāļāļāļ§āļēāļĄāđāļŠāļĩāđāļĒāļāļāļēāļ Buffer Overflow āđāļŦāļĄāļēāļ°āļāļąāļāļāđāļāļāļ§āļēāļĄāļĒāļēāļ§āļŦāļĢāļ·āļ Input āļāļĩāđāļāļąāļāļāđāļāļ
āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāđ fgets
#include <stdio.h>
#include <string.h>
int main() {
char buffer[20];
printf("āļāļĢāļļāļāļēāļāđāļāļāļāđāļāļāļ§āļēāļĄ: ");
fgets(buffer, sizeof(buffer), stdin); // āļāđāļēāļāđāļāđāļŠāļđāļāļŠāļļāļ 19 āļāļąāļ§āļāļąāļāļĐāļĢ
buffer[strcspn(buffer, "\n")] = '\0'; // āļĨāļāļāļąāļāļāļĢāļ°āļāļķāđāļāļāļĢāļĢāļāļąāļāđāļŦāļĄāđ
printf("āļāđāļāļāļ§āļēāļĄāļāļĩāđāļāđāļāļāļāļ·āļ: %s\n", buffer);
return 0;
}
āļāđāļāļŠāļģāļāļąāļ
- āđāļāđ
sizeof(buffer)
āđāļāļ·āđāļāđāļŦāđāļāļģāļŦāļāļāļāļāļēāļāļāļąāļāđāļāļĄāļąāļāļī - āđāļāđ
strcspn
āđāļāļ·āđāļāļĨāļ ‘\n’
āļāļēāļĢāļāļĢāļ§āļāļŠāļāļāļāļ§āļēāļĄāļāļđāļāļāđāļāļāļāļāļāļāđāļāļĄāļđāļĨāļāļģāđāļāđāļē
āđāļāļ·āđāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ āļāļ§āļĢāļāļĢāļ§āļāļŠāļāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļđāđāđāļāđāļāđāļāļāđāļāđāļēāļĄāļē āđāļāđāļ āļāđāļēāļāļēāļāļŦāļ§āļąāļāđāļŦāđāļāđāļāļāļāļąāļ§āđāļĨāļ āļāđāļāļ§āļĢāļāļĢāļ§āļāļŠāļāļāļāđāļāļāļāļģāđāļāđāļāđāļāļēāļ
āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāļāļĢāļ§āļāļŠāļāļāļāđāļēāļāļąāļ§āđāļĨāļ
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main() {
char buffer[20];
long number;
char *endptr;
printf("āļāļĢāļļāļāļēāļāđāļāļāļāļģāļāļ§āļāđāļāđāļĄ: ");
fgets(buffer, sizeof(buffer), stdin);
errno = 0; // āļĢāļĩāđāļāđāļāļŠāļāļēāļāļ° Error
number = strtol(buffer, &endptr, 10); // āđāļāļĨāļ String āđāļāđāļ Integer
if (errno != 0 || endptr == buffer || *endptr != '\0') {
printf("āļāļĢāļļāļāļēāļāđāļāļāļāļģāļāļ§āļāđāļāđāļĄāļāļĩāđāļāļđāļāļāđāļāļ\n");
} else {
printf("āļāļģāļāļ§āļāđāļāđāļĄāļāļĩāđāļāđāļāļāļāļ·āļ: %ld\n", number);
}
return 0;
}
āļāđāļāļŠāļģāļāļąāļ
strtol
āļāđāļ§āļĒāļāļĢāļ§āļāļāļąāļ Error āļāļāļ°āļāļģāļāļēāļĢāđāļāļĨāļ- āļāļēāļĢāđāļāđ
errno
āđāļĨāļ°endptr
āļāļģāđāļŦāđāļāļĢāļ§āļāļŠāļāļāđāļāđāļ§āđāļēāļāļĨāļĨāļąāļāļāđāļāļđāļāļāđāļāļāļŦāļĢāļ·āļāđāļĄāđ
āđāļāļ§āļāļēāļāļāļĩāđāļāļĩāļāļĩāđāļŠāļļāļāđāļāļāļēāļĢāļāļąāļāļāļēāļĢ Error
āļāļēāļĢāļāļąāļāļāļēāļĢ Error āļāļēāļ Input āļāļĒāđāļēāļāđāļŦāļĄāļēāļ°āļŠāļĄāļāļ·āļāļāļļāļāđāļāļŠāļģāļāļąāļāđāļāļāļēāļĢāļŠāļĢāđāļēāļāđāļāļĢāđāļāļĢāļĄāļāļĩāđāđāļāļ·āđāļāļāļ·āļāđāļāđ
āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāļāļĢāļ§āļāļŠāļāļ Error
#include <stdio.h>
int main() {
int value;
printf("āļāļĢāļļāļāļēāļāđāļāļāļāļģāļāļ§āļāđāļāđāļĄ: ");
if (scanf("%d", &value) != 1) { // āļāđāļēāļāđāļēāļāđāļĄāđāļŠāļģāđāļĢāđāļ
printf("āļāđāļāļĄāļđāļĨāļāļĩāđāļāđāļāļāđāļĄāđāļāļđāļāļāđāļāļ\n");
return 1; // āļāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄ Error
}
printf("āļāļģāļāļ§āļāđāļāđāļĄāļāļĩāđāļāđāļāļāļāļ·āļ: %d\n", value);
return 0;
}
āļāđāļāļŠāļģāļāļąāļ
- āļāļĢāļ§āļāļŠāļāļāļāđāļēāļāļĩāđ
scanf
āļāļ·āļāļĄāļē āļāđāļēāđāļĄāđāļāļĢāļāļāļēāļĄāļāļĩāđāļāļēāļ āļāđāļāļāļāļģ Error Handling
āļŠāļĢāļļāļāļ§āļīāļāļĩāļāļēāļĢāļĢāļąāļ Input āļāļĒāđāļēāļāļāļĨāļāļāļ āļąāļĒ
- āđāļāđ
scanf
āļāļĢāđāļāļĄāļĢāļ°āļāļļāļāļāļēāļāļāļĩāđāļāļģāļāļąāļ - āđāļāđ
fgets
āļŠāļģāļŦāļĢāļąāļāļāđāļāļāļ§āļēāļĄāļĒāļēāļ§āļŦāļĢāļ·āļ Input āđāļāļāļāļĩāļĨāļ°āļāļĢāļĢāļāļąāļ - āļāļĒāđāļēāđāļāļ·āđāļāļāļ·āļ Input āļāļāļāļāļđāđāđāļāđ āļāļĢāļ§āļāļŠāļāļāđāļĨāļ°āļāļąāļāļāļēāļĢ Error āđāļŠāļĄāļ
5. āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨ Standard Input āļāļąāđāļāļŠāļđāļ
āļŦāļĨāļąāļāļāļēāļāđāļāđāļēāđāļāļāļ·āđāļāļāļēāļāđāļĨāđāļ§ āļŠāļēāļĄāļēāļĢāļāļāđāļāļĒāļāļāđāļāļĒāļąāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļąāđāļāļŠāļđāļ āđāļāļ·āđāļāļāļąāļāļāļēāļĢāļāđāļāļĄāļđāļĨāļāļĩāđāļāļąāļāļāđāļāļāļāļķāđāļ āđāļāđāļ āļāļēāļĢāļāđāļāļāļāđāļāļĄāļđāļĨāļŦāļĨāļēāļĒāļāđāļē āļŦāļĢāļ·āļāļāļēāļĢāļāļąāļāļāļēāļĢāļāđāļāļāļ§āđāļēāļāđāļĨāļ°āļāļķāđāļāļāļĢāļĢāļāļąāļāđāļŦāļĄāđ
āļāļēāļĢāļĢāļąāļāļāđāļāļĄāļđāļĨāļŦāļĨāļēāļĒāļāđāļēāļāļĢāđāļāļĄāļāļąāļ
āļāđāļāļĒāļāļĢāļąāđāļāļāļĩāđāļāđāļāļāļāđāļēāļāļāđāļāļĄāļđāļĨāļŦāļĨāļēāļĒāļāđāļēāđāļāļāļĢāļąāđāļāđāļāļĩāļĒāļ§ āđāļāđāļ āļāļąāļ§āđāļĨāļāļŦāļĨāļēāļĒāļāļąāļ§āļāļĩāđāļāļąāđāļāļāđāļ§āļĒāļāđāļāļāļ§āđāļēāļāļŦāļĢāļ·āļāđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒāļāļļāļĨāļ āļēāļ
āļāļąāļ§āļāļĒāđāļēāļ: āļāđāļāļĄāļđāļĨāļāļĩāđāļāļąāđāļāļāđāļ§āļĒāļāđāļāļāļ§āđāļēāļ
#include <stdio.h>
int main() {
int numbers[5];
printf("āļāļĢāļļāļāļēāļāđāļāļāļāļģāļāļ§āļāđāļāđāļĄ 5 āļāđāļē (āļāļąāđāļāļāđāļ§āļĒāļāđāļāļāļ§āđāļēāļ): ");
for (int i = 0; i < 5; i++) {
scanf("%d", &numbers[i]);
}
printf("āļāđāļēāļāļĩāđāļāđāļāļāļāļ·āļ: ");
for (int i = 0; i < 5; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
return 0;
}
āļāļąāļ§āļāļĒāđāļēāļ: āļāđāļāļĄāļđāļĨāļāļĩāđāļāļąāđāļāļāđāļ§āļĒāđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒāļāļļāļĨāļ āļēāļ
#include <stdio.h>
int main() {
int numbers[3];
printf("āļāļĢāļļāļāļēāļāđāļāļāļāļģāļāļ§āļāđāļāđāļĄ 3 āļāđāļē (āļāļąāđāļāļāđāļ§āļĒāđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒāļāļļāļĨāļ āļēāļ): ");
scanf("%d,%d,%d", &numbers[0], &numbers[1], &numbers[2]);
printf("āļāđāļēāļāļĩāđāļāđāļāļāļāļ·āļ: %d, %d, %d\n", numbers[0], numbers[1], numbers[2]);
return 0;
}
āļāļēāļĢāļāļąāļāļāļēāļĢ Input āļāļĩāđāļĄāļĩāļāđāļāļāļ§āđāļēāļāļŦāļĢāļ·āļāļāļēāļĢāļāļķāđāļāļāļĢāļĢāļāļąāļāđāļŦāļĄāđ
āļāļēāļāļāļĢāļąāđāļāļāđāļāļĄāļđāļĨāļāļģāđāļāđāļēāļĄāļĩāļāđāļāļāļ§āđāļēāļāļŦāļĢāļ·āļāļāļąāļāļāļĢāļ°āļāļķāđāļāļāļĢāļĢāļāļąāļāđāļŦāļĄāđ āļāļķāđāļāļāđāļāļāļāļąāļāļāļēāļĢāļāļĒāđāļēāļāđāļŦāļĄāļēāļ°āļŠāļĄ
āļāļąāļ§āļāļĒāđāļēāļ: āļāļēāļĢāļāļąāļāļāļēāļĢāļāļĢāļĢāļāļąāļāđāļŦāļĄāđ
āđāļāđ fgets
āđāļāļ·āđāļāļāđāļēāļāļāđāļāļĄāļđāļĨāļāļąāđāļāļāļĢāļĢāļāļąāļ āđāļĨāđāļ§āļĨāļāļāļąāļāļāļĢāļ° ‘\n’
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
printf("āļāļĢāļļāļāļēāļāđāļāļāļāđāļāļāļ§āļēāļĄ: ");
fgets(input, sizeof(input), stdin);
input[strcspn(input, "\n")] = '\0'; // āļĨāļāļāļąāļāļāļĢāļ°āļāļĢāļĢāļāļąāļāđāļŦāļĄāđ
printf("āļāđāļāļāļ§āļēāļĄāļāļĩāđāļāđāļāļāļāļ·āļ: %s\n", input);
return 0;
}
āļāļēāļĢāļāļąāļāļāļēāļĢ Input āļŦāļĨāļēāļĒāļāļĢāļĢāļāļąāļ
āđāļāļĢāđāļāļĢāļĄāļāļēāļāļāļĢāļ°āđāļ āļāļāđāļāļāļāļēāļĢāļĢāļąāļāļāđāļāļĄāļđāļĨāļāļĩāļĨāļ°āļŦāļĨāļēāļĒāļāļĢāļĢāļāļąāļ āđāļāđāļ āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļāļ§āļēāļĄāļŦāļĢāļ·āļāļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļāļĄāļđāļĨ
āļāļąāļ§āļāļĒāđāļēāļ: āļāļēāļĢāļāđāļēāļāļŦāļĨāļēāļĒāļāļĢāļĢāļāļąāļāļāđāļģāđ
#include <stdio.h>
int main() {
char line[100];
printf("āļāļĢāļļāļāļēāļāđāļāļāļāđāļāļāļ§āļēāļĄāļŦāļĨāļēāļĒāļāļĢāļĢāļāļąāļ (āļāļ Ctrl+D āđāļāļ·āđāļāļŠāļīāđāļāļŠāļļāļ):\n");
while (fgets(line, sizeof(line), stdin) != NULL) {
printf("āļāļĢāļĢāļāļąāļāļāļĩāđāļāđāļāļ: %s", line);
}
return 0;
}
āļāļēāļĢāļāļąāļāļāļēāļĢ Input āđāļāļāđāļāļāļēāļĄāļīāļ
āđāļāļāļēāļāļāļĢāļāļĩ āđāļĄāđāļāļĢāļēāļāļāļģāļāļ§āļāļāđāļāļĄāļđāļĨāļĨāđāļ§āļāļŦāļāđāļē āļāļķāļāļāđāļāļāļāļąāļāļāļēāļĢāđāļāļāļ§āļāļĨāļđāļāļĢāļąāļāļāđāļēāđāļāđāļĢāļ·āđāļāļĒāđ
āļāļąāļ§āļāļĒāđāļēāļ: āļāļēāļĢāļāļ§āļāļĢāļ§āļĄāļāļąāļ§āđāļĨāļāļāļĩāđāđāļĄāđāļāļĢāļēāļāļāļģāļāļ§āļ
#include <stdio.h>
int main() {
int number, sum = 0;
printf("āļāļĢāļļāļāļēāļāđāļāļāļāļģāļāļ§āļāđāļāđāļĄ (āļāļ Ctrl+D āđāļāļ·āđāļāļŠāļīāđāļāļŠāļļāļ):\n");
while (scanf("%d", &number) == 1) {
sum += number;
}
printf("āļāļĨāļĢāļ§āļĄāļāļāļāļāļģāļāļ§āļāđāļāđāļĄāļāļĩāđāļāđāļāļāļāļ·āļ: %d\n", sum);
return 0;
}
āļŠāļĢāļļāļ
āļāļēāļĢāļāļąāļāļāļēāļĢ Input āđāļāļāļāļąāđāļāļŠāļđāļāļāļģāđāļŦāđāđāļāļĢāđāļāļĢāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļāļāļĢāļąāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļąāļāļāđāļāļāļāļķāđāļ āđāļāđāļ āļŦāļĨāļēāļĒāļāđāļē āļŦāļĨāļēāļĒāļāļĢāļĢāļāļąāļ āļŦāļĢāļ·āļāļāđāļāļĄāļđāļĨāļāļĩāđāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāđāļāđāđāļāļāđāļāļāļēāļĄāļīāļ āļāļēāļĢāļāļķāļāđāļāđāđāļāļāļāļīāļāđāļŦāļĨāđāļēāļāļĩāđāļāļ°āļāđāļ§āļĒāđāļāļīāđāļĄāļāļ§āļēāļĄāļĒāļ·āļāļŦāļĒāļļāđāļāđāļĨāļ°āļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļāļāđāļāļĢāđāļāļĢāļĄ
6. āļāļąāļāļŦāļēāļāļĩāđāļāļāļāđāļāļĒāđāļĨāļ°āļ§āļīāļāļĩāđāļāđāđāļ
āđāļĄāļ·āđāļāđāļāđ Standard Input āđāļāļ āļēāļĐāļē C āļāļđāđāđāļĢāļīāđāļĄāļāđāļāļĄāļąāļāđāļāļāļāļąāļāļŦāļēāļŦāļĨāļēāļĒāļāļĒāđāļēāļ āļŠāđāļ§āļāļāļĩāđāļāļ°āļŠāļĢāļļāļāļāļąāļāļŦāļēāļāļąāđāļ§āđāļāđāļĨāļ°āļ§āļīāļāļĩāđāļāđ
āļāļąāļāļŦāļēāđāļĨāļ°āļ§āļīāļāļĩāđāļāđāđāļāļāļāļ scanf
āļāļąāļāļŦāļē 1: āļāļēāļĢāļāđāļēāļĄ Input
āļāļēāļāļāļĢāļąāđāļ scanf
āļāđāļēāļāļāđāļēāļāļąāļ§āđāļĨāļāđāļĨāđāļ§āļāļīāđāļāļāļąāļāļāļĢāļ° ‘\n’ āđāļ§āđ āļāļģāđāļŦāđāļāļēāļĢāļāđāļēāļāļāļĢāļąāđāļāļāđāļāđāļāļĄāļĩāļāļąāļāļŦāļē
āļāļąāļ§āļāļĒāđāļēāļ
#include <stdio.h>
int main() {
int number;
char letter;
printf("āļāļĢāļļāļāļēāļāđāļāļāļāļģāļāļ§āļāđāļāđāļĄ: ");
scanf("%d", &number);
printf("āļāļĢāļļāļāļēāļāđāļāļāļāļąāļāļĐāļĢ: ");
scanf("%c", &letter); // āļāļ°āļāđāļēāļ '\n' āļāļĩāđāđāļŦāļĨāļ·āļāđāļāļ
printf("āļāļģāļāļ§āļāđāļāđāļĄ: %d, āļāļąāļāļĐāļĢ: %c\n", number, letter);
return 0;
}
āļ§āļīāļāļĩāđāļāđ
āđāļŠāđāļāđāļāļāļ§āđāļēāļāļŦāļāđāļē %c
āđāļāļ·āđāļāđāļŦāđāļāđāļēāļĄ ‘\n’
scanf(" %c", &letter);
āļāļąāļāļŦāļē 2: Buffer Overflow
āļŦāļēāļāļāđāļāļāļāđāļāļāļ§āļēāļĄāļĒāļēāļ§āđāļāļīāļ Buffer āđāļāļĢāđāļāļĢāļĄāļāļēāļāļĨāđāļĄ
āļāļąāļ§āļāļĒāđāļēāļ
char input[10];
scanf("%s", input); // āļāđāļāļāđāļāļīāļ 10 āļāļąāļ§āļāļ° Overflow
āļ§āļīāļāļĩāđāļāđ
āļĢāļ°āļāļļāļāļāļēāļāļŠāļđāļāļŠāļļāļ
scanf("%9s", input);
āļŦāļĢāļ·āļāđāļāđ fgets
āđāļāļ
āļāļąāļāļŦāļēāđāļĨāļ°āļ§āļīāļāļĩāđāļāđāđāļāļāļāļ fgets
āļāļąāļāļŦāļē 1: āļāļēāļĢāļāļąāļāļāļēāļĢāļāļąāļāļāļĢāļ°āļāļķāđāļāļāļĢāļĢāļāļąāļāđāļŦāļĄāđ
fgets
āļāļ°āđāļāđāļāļāļąāļāļāļĢāļ° ‘\n’ āđāļ§āđāđāļ String āļāļķāđāļāļāļēāļāļāļģāđāļŦāđāļāļēāļĢāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāļŦāļĢāļ·āļāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļīāļāļāļĨāļēāļ
āļāļąāļ§āļāļĒāđāļēāļ
char input[20];
fgets(input, sizeof(input), stdin);
if (strcmp(input, "yes") == 0) {
printf("Input āļāļ·āļ yes\n");
}
āļāļĢāļīāļ āđ āđāļĨāđāļ§āļāđāļēāļāļĩāđāļāđāļēāļāđāļāđāļāļ·āļ "yes\n"
āļāļģāđāļŦāđāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāđāļĄāđāļāļĢāļ
āļ§āļīāļāļĩāđāļāđ
āļĨāļ ‘\n’ āļāļīāđāļ
input[strcspn(input, "\n")] = '\0';
āļāļēāļĢāļāļąāļāļāļēāļĢ Input āļāļĩāđāđāļĄāđāļāļđāļāļāđāļāļ
āļāļąāļāļŦāļē 1: āļāđāļāļāļāđāļāļĄāļđāļĨāļāļīāļāļāļĢāļ°āđāļ āļ
āđāļāđāļ āļāļēāļāļŦāļ§āļąāļāļāļģāļāļ§āļāđāļāđāļĄ āđāļāđāļāļđāđāđāļāđāļāđāļāļāļāđāļāļāļ§āļēāļĄ
āļāļąāļ§āļāļĒāđāļēāļ
int number;
scanf("%d", &number); // āļāđāļēāļāđāļāļāļāđāļāļāļ§āļēāļĄāļāļ° Error
āļ§āļīāļāļĩāđāļāđ
āļāļĢāļ§āļāļŠāļāļāļāļ§āļēāļĄāļāļđāļāļāđāļāļāļāļāļ Input āļāđāļāļ
if (scanf("%d", &number) != 1) {
printf("Input āđāļĄāđāļāļđāļāļāđāļāļ\n");
while (getchar() != '\n'); // āļĨāđāļēāļ Buffer
}
āļāļąāļāļŦāļēāđāļāļĩāđāļĒāļ§āļāļąāļāļāļēāļĢāļāđāļēāļāļŦāļĨāļēāļĒāļāļĢāļĢāļāļąāļ
āļāļąāļāļŦāļē: āđāļāđ scanf
āđāļĨāļ° fgets
āļĢāđāļ§āļĄāļāļąāļ
āļŦāļēāļāđāļāđāļŠāļĨāļąāļāļāļąāļ āļāļēāļāđāļāļīāļāļāļąāļāļŦāļēāđāļāļĢāļēāļ° scanf
āļāļ°āđāļĄāđāļāđāļēāļ ‘\n’ āļāļģāđāļŦāđ fgets
āļāđāļēāļ ‘\n’ āļāļĩāđāđāļŦāļĨāļ·āļāļāļĒāļđāđāđāļāļ
āļŠāļēāđāļŦāļāļļ
āļŦāļĨāļąāļāļāļēāļāđāļāđ scanf
āļāļ°āđāļŦāļĨāļ·āļāļāļąāļāļāļĢāļ° ‘\n’ āļāļĒāļđāđāđāļ Buffer
āļ§āļīāļāļĩāđāļāđ
āļĨāđāļēāļ Buffer āļŦāļĨāļąāļāđāļāđ scanf
while (getchar() != '\n');
āļŠāļĢāļļāļ
āļāļēāļĢāđāļāđ Standard Input āđāļāļ āļēāļĐāļē C āļĄāļĩāļāđāļāļāļ§āļĢāļĢāļ°āļ§āļąāļāļŦāļĨāļēāļĒāļāļĒāđāļēāļ āđāļāđāļāđāļēāđāļāđāļēāđāļāļāļąāļāļŦāļēāđāļĨāļ°āļ§āļīāļāļĩāđāļāđāđāļ āļāļ°āļāđāļ§āļĒāđāļŦāđāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄāđāļāđāļāļĨāļāļāļ āļąāļĒāđāļĨāļ°āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ āđāļāļĒāđāļāļāļēāļ°āļāļēāļĢāđāļĨāļ·āļāļāđāļāđ scanf
āļŦāļĢāļ·āļ fgets
āđāļŦāđāđāļŦāļĄāļēāļ°āļāļąāļāļāļēāļ

7. āļāļąāļ§āļāļĒāđāļēāļāđāļāļĢāđāļāļĢāļĄāļāļĩāđāđāļāđ Standard Input
āļŠāđāļ§āļāļāļĩāđāļāļ°āđāļŠāļāļāļāļąāļ§āļāļĒāđāļēāļāđāļāļĢāđāļāļĢāļĄāļāļĢāļīāļāļāļĩāđāđāļāđ Standard Input āļāļąāđāļāđāļāđāļāļ·āđāļāļāļēāļāđāļāļāļāļāļķāļāļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđ
āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđ 1: āļāļģāļāļ§āļāļāļĨāļĢāļ§āļĄāđāļĨāļ°āļāđāļēāđāļāļĨāļĩāđāļĒ
āļāđāļēāļāļāļģāļāļ§āļāđāļāđāļĄāļŦāļĨāļēāļĒāļāđāļē āđāļĨāđāļ§āļŦāļēāļāļĨāļĢāļ§āļĄāđāļĨāļ°āļāđāļēāđāļāļĨāļĩāđāļĒ
#include <stdio.h>
int main() {
int numbers[100];
int count = 0, sum = 0;
float average;
printf("āļāļĢāļļāļāļēāļāđāļāļāļāļģāļāļ§āļāđāļāđāļĄāļŦāļĨāļēāļĒāļāđāļē (āļāļ Ctrl+D āđāļāļ·āđāļāļŠāļīāđāļāļŠāļļāļ):\n");
while (scanf("%d", &numbers[count]) == 1) {
sum += numbers[count];
count++;
}
if (count > 0) {
average = (float)sum / count;
printf("āļāļĨāļĢāļ§āļĄ: %d, āļāđāļēāđāļāļĨāļĩāđāļĒ: %.2f\n", sum, average);
} else {
printf("āđāļĄāđāļĄāļĩāļāđāļāļĄāļđāļĨāļāļĩāđāļāđāļāļ\n");
}
return 0;
}
āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđ 2: āđāļāļĢāđāļāļĢāļĄāļāļĢāļ§āļāļŠāļāļāļāļģāļāļĨāļąāļ (Palindrome)
āļāļĢāļ§āļāļŠāļāļāļ§āđāļē String āļāļĩāđāļāđāļāļāđāļāđāļēāļĄāļēāđāļāđāļāļāļģāļāļĨāļąāļ (āļāđāļēāļāļāļēāļāļāđāļēāļĒāđāļāļāļ§āļēāļŦāļĢāļ·āļāļāļ§āļēāđāļāļāđāļēāļĒāļāđāđāļŦāļĄāļ·āļāļāļāļąāļ) āļŦāļĢāļ·āļāđāļĄāđ
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool isPalindrome(char str[]) {
int start = 0;
int end = strlen(str) - 1;
while (start < end) {
if (str[start] != str[end]) {
return false;
}
start++;
end--;
}
return true;
}
int main() {
char input[100];
printf("āļāļĢāļļāļāļēāļāđāļāļāļāđāļāļāļ§āļēāļĄ: ");
fgets(input, sizeof(input), stdin);
// āļĨāļ '\n'
input[strcspn(input, "\n")] = '\0';
if (isPalindrome(input)) {
printf("āļāđāļāļāļ§āļēāļĄāļāļĩāđāļāđāļāļāđāļāđāļāļāļģāļāļĨāļąāļ\n");
} else {
printf("āļāđāļāļāļ§āļēāļĄāļāļĩāđāļāđāļāļāđāļĄāđāđāļāđāļāļģāļāļĨāļąāļ\n");
}
return 0;
}
āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđ 3: āđāļāļĢāđāļāļĢāļĄāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāļĢāļđāļāđāļāļ CSV
āļāđāļēāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļĒāļđāđāđāļāļĢāļđāļāđāļāļ CSV (Comma Separated Values) āđāļĨāđāļ§āđāļĒāļāđāļāđāļĨāļ°āļāđāļēāļāļāļāļĄāļē
#include <stdio.h>
#include <string.h>
int main() {
char input[200];
char *token;
printf("āļāļĢāļļāļāļēāļāđāļāļāļāđāļāļĄāļđāļĨāđāļāļ CSV: ");
fgets(input, sizeof(input), stdin);
// āļĨāļ '\n'
input[strcspn(input, "\n")] = '\0';
// āđāļĒāļāļāđāļāļĄāļđāļĨāļāđāļ§āļĒāđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒāļāļļāļĨāļ āļēāļ
token = strtok(input, ",");
while (token != NULL) {
printf("āļāđāļē: %s\n", token);
token = strtok(NULL, ",");
}
return 0;
}
āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđ 4: āđāļāļĢāđāļāļĢāļĄāđāļāđāļāļāļ (Interactive) āļāļĩāđāļĢāļąāļ Input āļŦāļĨāļēāļĒāļāļĢāļąāđāļ
āļĢāļąāļāļāđāļāļāļ§āļēāļĄāļāļēāļāļāļđāđāđāļāđāļŦāļĨāļēāļĒāļāļĢāļąāđāļāđāļĨāļ°āļāļģāļāļēāļāļāļēāļĄ Input āļāļĩāđāļāđāļāļ āļāļāļāļ§āđāļēāļāļđāđāđāļāđāļāļ°āļāļīāļĄāļāđāļāļģāļŠāļąāđāļ exit
#include <stdio.h>
#include <string.h>
int main() {
char input[50];
printf("āļāļīāļĄāļāđ 'exit' āđāļāļ·āđāļāļāļāļāļāļēāļāđāļāļĢāđāļāļĢāļĄ\n");
while (1) {
printf("āļāļĢāļļāļāļēāļāđāļāļāļāļģāļŠāļąāđāļ: ");
fgets(input, sizeof(input), stdin);
// āļĨāļ '\n'
input[strcspn(input, "\n")] = '\0';
if (strcmp(input, "exit") == 0) {
printf("āļāļāļāļēāļĢāļāļģāļāļēāļāļāļāļāđāļāļĢāđāļāļĢāļĄ\n");
break;
} else {
printf("āļāļģāļŠāļąāđāļāļāļĩāđāļāđāļāļāļāļ·āļ: %s\n", input);
}
}
return 0;
}
āļŠāļĢāļļāļ
āļāļēāļāļāļąāļ§āļāļĒāđāļēāļāđāļŦāļĨāđāļēāļāļĩāđ āļāļ°āđāļŦāđāļāļ§āđāļē Standard Input āļŠāļēāļĄāļēāļĢāļāļāļģāđāļāđāļāđāļŠāļĢāđāļēāļāđāļāļĢāđāļāļĢāļĄāđāļāđāļāļąāđāļāđāļāļāļāļ·āđāļāļāļēāļāđāļĨāļ°āđāļāļāđāļāđāļāļāļāļāļĢāļīāļ āļāļēāļĢāđāļāđāļēāđāļāđāļĨāļ°āđāļĨāļ·āļāļāđāļāđāļ§āļīāļāļĩāļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄ āļāļ°āļāđāļ§āļĒāđāļŦāđāđāļāļĢāđāļāļĢāļĄāļāļāļāļāļļāļāļĄāļĩāļāļ§āļēāļĄāļĒāļ·āļāļŦāļĒāļļāđāļāđāļĨāļ°āđāļāđāļāļēāļāđāļāđāļāļĢāļīāļ
8. āļāļāļŠāļĢāļļāļ
āļāļāļāļ§āļēāļĄāļāļĩāđāđāļāđāļāļāļīāļāļēāļĒāļāļēāļĢāđāļāđ Standard Input āđāļāļ āļēāļĐāļē C āļāļąāđāļāđāļāđāļāļ·āđāļāļāļēāļāļāļāļāļķāļāļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđ āļāļĢāđāļāļĄāļāļąāđāļāļ§āļīāļāļĩāļāļēāļĢāđāļāļĩāļĒāļāļāļĩāđāļāļĨāļāļāļ āļąāļĒ āđāļĨāļ°āļāļąāļ§āļāļĒāđāļēāļāđāļāļĢāđāļāļĢāļĄāļāļĢāļīāļ
āļāļāļāļ§āļāļāļ§āļēāļĄāļŠāļģāļāļąāļāļāļāļ Standard Input
- Standard Input āļāļ·āļāļāļĨāđāļāļāļ·āđāļāļāļēāļāļāļĩāđāļāļģāđāļŦāđāđāļāļĢāđāļāļĢāļĄāļĢāļąāļāļāđāļāļĄāļđāļĨāļāļēāļāļ āļēāļĒāļāļāļāđāļāđ
- āļ āļēāļĐāļē C āļĄāļĩāļāļąāļāļāđāļāļąāļ
scanf
āđāļĨāļ°fgets
āļŠāļģāļŦāļĢāļąāļāļĢāļąāļāļāđāļē āđāļāđāļ āļāļąāļ§āđāļĨāļāđāļĨāļ°āļāđāļāļāļ§āļēāļĄ
āļāļļāļāļŠāļģāļāļąāļāđāļāļāļēāļĢāđāļāļĩāļĒāļ Input āļāļĩāđāļāļĨāļāļāļ āļąāļĒāđāļĨāļ°āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ
- āļāđāļāļāļāļąāļ Buffer Overflow
- āđāļāđ
scanf
āļāļĢāđāļāļĄāļāļģāļŦāļāļāļāļāļēāļ āđāļāđāļ%9s
- āđāļāđ
fgets
āļŠāļģāļŦāļĢāļąāļāļāđāļāļāļ§āļēāļĄāļĒāļēāļ§āļŦāļĢāļ·āļāļāļēāļĢāļāđāļēāļāļāļĩāļĨāļ°āļāļĢāļĢāļāļąāļ
- āļāļĢāļ§āļāļŠāļāļāļāļ§āļēāļĄāļāļđāļāļāđāļāļāļāļāļ Input
- āđāļāđ
strtol
āļŦāļĢāļ·āļstrtod
āđāļāļ·āđāļāļāļĢāļ§āļāļŠāļāļ Error - āđāļāļīāđāļĄāļāļēāļĢāļāļąāļāļāļēāļĢ Error āđāļĄāļ·āđāļ Input āđāļĄāđāļāļđāļāļāđāļāļ
- āļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđāđāļāđ
- āļāļąāļāļāļēāļĢ Input āļŦāļĨāļēāļĒāļāđāļē āļŦāļĨāļēāļĒāļāļĢāļĢāļāļąāļ āļŦāļĢāļ·āļāļāđāļāļĄāļđāļĨāļāļĩāđāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāđāļāđ
āļāļąāđāļāļāļāļāļāđāļāđāļ
āļŦāļĨāļąāļāļāļēāļāđāļāđāļēāđāļ Standard Input āđāļĨāđāļ§ āļāļ§āļĢāđāļĢāļĩāļĒāļāļĢāļđāđāđāļāļīāđāļĄāđāļāļīāļĄāđāļāļŦāļąāļ§āļāđāļ:
- Standard Output āđāļĨāļ° Standard Error: āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļīāļĄāļāđāļāļĨāļĨāļąāļāļāđāđāļĨāļ°āļāđāļāļāļ§āļēāļĄ Error
- āļāļēāļĢāļāļģāļāļēāļāļāļąāļāđāļāļĨāđ: āļāļŠāļēāļāļāļēāļĢāļāđāļēāļāđāļāļĨāđāđāļāđāļēāļāļąāļ Standard Input
- āļāļēāļĢāļāļģāđāļāļāļāļķāļāļŦāļąāļāļāļĢāļīāļ: āļāļģāļāļąāļ§āļāļĒāđāļēāļāđāļāļāļĢāļąāļāđāļāđāļāļąāļāđāļāļĢāđāļāđāļāļāđāļāļāļāļāļļāļ
āļāđāļāļāļ§āļēāļĄāļāļķāļāļāļđāđāļāđāļēāļ
Standard Input āđāļāđāļāļāļ·āđāļāļāļēāļāļŠāļģāļāļąāļāļāļāļāļ āļēāļĐāļē C āļāļĩāđāđāļĄāđāļāļ°āļāļđāđāļĢāļĩāļĒāļāļāđāļēāļĒ āđāļāđāļāđāļĄāļĩāļĢāļēāļĒāļĨāļ°āđāļāļĩāļĒāļāļĨāļķāļāļāļķāđāļ āļŦāļēāļāļāļķāļāđāļāđāđāļŦāđāļāļđāļāļāđāļāļ āļāļļāļāļāļ°āļŠāļēāļĄāļēāļĢāļāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļĩāđāļāļĨāļāļāļ āļąāļĒ āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ āđāļĨāļ°āļāļĢāđāļāļĄāļāđāļāļĒāļāļāđāļāļĒāļąāļāļāļēāļāļāļĩāđāļāļąāļāļāđāļāļāļĄāļēāļāļāļķāđāļ