c언어 strlen 함수 질문입니다.

hydrangeanroses의 이미지

#include
#include
using namespace std;

int main()
{
char arr[1000001];
fgets(arr, sizeof(arr) - 1, stdin); // "The Curious Case of Benjamin Button" 입력(35글자)
cout << strlen(arr) << endl; // 36 출력
arr[strlen(arr) - 1] = '\0'; // null 문자 삽입
cout << strlen(arr) << endl; // 35 출력
return 0;
}

처음에는 fgets함수(null문자 포함 x) 때문에 null문자가 없는데 길이가 왜 36인 것이며,
그 후에는 null 문자를 넣었는데 문자열의 길이가 35로 줄어드는 이유가 뭐죠???

chanik의 이미지

https://modoocode.com/38

Quote:
char* fgets(char* str, int num, FILE* stream);

... 스트림에서 문자열을 받아서 (num - 1) 개의 문자를 입력 받을 때 까지나, 개행 문자나 파일 끝(End-of-File) 에 도달할 때 까지 입력 받아서 C 형식의 문자열로 저장한다. 개행 문자는 fgets 로 하여금 입력을 끝나게 하지만 이 문자 역시 str 에 저장한다. NULL 문자는 자동적으로 마지막으로 입력받은 문자 뒤에 붙는다.

개행문자가 포함되므로 36개가 된 것이고, arr[strlen(arr) - 1] = '\0' 코드가 개행문자를 널문자로 덮어 썼으므로 35개로 줄어든 것이죠.

hydrangeanroses의 이미지

제대로 이해가 갔어요~

세벌의 이미지

kldp 에 소스코드는 code 태그 안에 넣어서 제대로 보입니다.
코드를 보니 C 아니고 C++ 인 거 같은데요

using namespace std;
이런 코드를 C에서도 쓰나요?
hydrangeanroses의 이미지

fgets 함수는 c, c++ 상관없이 관련 있는 것이라 생각해 질문 올린겁니다~