\n 처리.
fgets은 \n까지 저장하는 친구이기 때문이다.
그래서 이를 처리해주고 넘어가야한다.
int main (void){
char end[16];
fputs("메시지 입력 : ", stdout);
fgets(end, 16, stdin);
printf("%d\n", (int)strlen(end));
end[strlen(end)-1] = '\0';
printf("%d\n", (int)strlen(end));
printf("%d\n", strcmp(end, "123"));
}
Strcmp
int strcmp(const char *s1, const char *s2);
두 문자열이 [완전히] 일치하는지 확인하는 함수.
아닌경우 틀린 코드끼리의 아스키값 차이를 반환한다.
fget
char *fgets(char *s, int size, FILE *stream);
문자열 fput으로 부터 온 값을 stream(stdin) 을 통해 s에 받는다.
fputs 랑 쌍으로 쓰이며 scanf 기능을 한다.
fgets는 size-1 크기만큼만 받을 수 있다. 왜냐하면 문자열의 끝에 0이 와야 한다는 규칙 때문.
그런데 얘는 \n까지 인식하는 친구이다. 그래서 사용시 넉넉하게 size를 설정하거나 조건문을 잘 돌려야한다.
while (1){
fputs("메시지를 입력하세요 : ", stdout);
fflush(stdout);
do {
fgets(msg, MSG_MAX, stdin);
r = send(client_sock, msg, strlen(msg), 0);
} while (msg[r-1] != '\n');
}
이런식으로...
size 이상 문자열이 오면은 stdin 단계에서 알아서 반복해서 보내주긴 한다.
반복해서 보낼때 잘 보면
12345678을 size 6으로 보낸다면
123450
678\n0?
이렇게 간다.
'개발 > C' 카테고리의 다른 글
[C] buffer memory flush 하는법 (fgets) (0) | 2022.12.26 |
---|---|
[C] 형식 지정자 (ex. %d, %s, %o...) (0) | 2022.12.26 |
[네트워크] [C 소켓통신 #2] buffer 크기 이상으로 받은 내용을 output (0) | 2022.12.23 |
[C] scanf() fgets() fscanf() sscanf() 차이점 (0) | 2022.12.22 |
[네트워크] [C 소켓통신 #1] codelite 이용한 소켓통신 (send, receive flag 의미) (0) | 2022.12.21 |