문자열은 항상 NULL을 포함한다.
int ch1, ch2;
ch1=getchar();
ch2=fgetc(stdin);
putchar(ch1);
fputc(ch2,stdout);
여기서 하나의 문자만 입력받고 출력된다.
그러나 실제로는 두 개의 문자가 입력되고 출력되었다
다만 두번째 문자가 엔터키이다 보미 눈에 띄질 않았을 뿐이다.
사실, 엔터키도 아스키코드 값이 10인 '\n'으로 표현되는 문자이다.
getchar함수와 fgetc함수의 반환형이 int이다.
scanf 함수는 공백이 포함된 형태의 문자열을 입력 받는데 제한이 있다.
puts함수가 호출되면 문자열 출력 후, 자동으로 개행이 이루어지지만
fputs 함수가 호출되면 문자열 출력 후 자동으로 개행이 이루어지지 않는다.
char str[7];
gets(str);
char str[7];
fgets(str,sizeof(str),stdin);
//sizeof(str)의 반환값인 7보다 하나가 작은 6에 해당하는 길이의 문자열만 읽어서 str에 저장하게 된다.
왜 하나가 작은 길이의 문자열이 저장되는지 궁금한가?
이는 널 문자의 저장을 위한 것이다.
아무리 공간이 부족해도 널 문자가 삽입되지 않으면 문자열이라 할 수 없다.
그래서 문자열을 입력받으면 문자열의 끝에 자동으로 널문자가 추가된다.
puts(str);
fputs(str,stdout);
fgets함수는 \n을 만날때까지 문자열을 읽어들이는데, \n을 제외시키거나 버리지 않고 문자열의 일부로 받아들인다.
scanf함수를 통해서는 공백을 포함하는 형태의 문자열을 입력받을 수 없다.
while(getchar()!='\n')을 하면 입력버퍼에 저장된 문자들은 읽어들이면 지워진다.
strlen() 전달된 문자열의 길이를 반환하되, 널 문자는 길이에 포함하지 않는다.