본문 바로가기

몰랐던 사실들

[몰랐던 사실] fgets의 비밀 fgets의 비밀 fgets는 개행문자를 무시하고 문자열을 입력 받을 수 있는데 마지막에 개행문자 '\n' 도 같이 포함이 되게 된다. 그렇기 때문에 이를 제거하려면 아래와 같이 제거해주면 된다. 고로 문자열의 길이 또한 \n이 붙어있기 때문에 "hello" 라는 문자열을 입력했을 때 5가 아닌 6이 나올 것이다. 주의해서 사용하자! str[strlen(str) - 1] = '\0' fgets와 scanf를 함께 사용할 때에는 '\n'를 생각해줘야한다. Scanf는 \n 을 저장하지 않기 때문에 buffer에 그대로 남아있는데 반복문을 사용 할 때 fgets 와 scanf를 섞어 사용하면 scanf에서 읽지 않은 개행문자가 fgets에 자동으로 들어가서 원치 않는 상황이 발생할 수 있다. 이럴 때에는 g.. 더보기
[Flutter] 몰랐던 사실 - widget.data 와 아닌 것의 차이 widget.data vs data 플러터를 하다보면 다른 클래스나 위젯에 Data를 넘겨주고 scaffold 아래에서 UI를 그려줄 때 widget. 을 붙여야 할 때가 있고 아닐 때가 있다. 무슨 차이지가 궁금해서 찾아봤는데 그것은 바로 Stateful과 Stateless의 차이였다. Stateful: widget.data Stateless: data 더보기
[C언어 몰랐던 사실] scanf로 공백까지 읽어버리기! Scanf로 공백까지 읽을 수 있다..! " ^/n " 과 같은 지정자를 포함하면 된다..! scanf("%[^\n]s",string); 더보기
[C언어 몰랐던 사실] scanf 와 pointer Scanf 와 pointer 사용하기! 나는 string을 scanf로 입력 받고 싶어서 아래와 같이 코드를 작성하고 compile을 했다. 근데 왠걸 오류가 났다? 띠용 왜 났지? 보니 char *string으로 선언을 하면 Read 밖에 안되기 때문에 그런 것이었다. (수정 못하는건 알고 있었는데 scanf로 입력 받는 것도 안될줄이야..) char *string1; printf("Enter the string!"); scanf("%s", string1); 해결법 ( Solution ) 해결법은 간단하다. 두가지 정도가 있는데 1. 배열로 선언하기! 2. malloc을 사용하면 된다~! 더보기