본문 바로가기

Linux

(3)
[c] size_t의 포멧형식 sizeof( )를 결과값을 출력하기 위해서 코드를 작성 하고 리눅스 gcc 컴파일시 다음과 같은 경고를 보게 될 수도 있다. 이럴땐 포멧 형식을 printf("%zu" ,sizeof(long)); 으로 변경해 주자 sizeof는 size_t를 반환하는데 c99에서 size_t의 printf포멧이 %zu로 지정되었다. test.c:8:9: warning: format '%d' expects argument of type 'int' , but argument 2 has type 'long unsigned int'[-Wformat=] printf("long size : %d\n",sizeof(long));
[c] gets( ) vs scanf( ) gets( )와 scanf( )는 둘다 Buffered IO이다. 개행문자 '\n'에서 두 함수는 차이점을 보이는데, gets( )는 사용자가 입력한 개행문자 까지 읽어 들이지만 scanf( )는 사용자가 입력한 '\n'를 입력 버퍼에 남겨두게 된다. 다음과 같은 코드를 VS에서 실행시키고 "Hello"를 입력한다. 입력버퍼에 입력되는 글자는 Hello와 아래의 노란 박스 부분에서 확인 할 수 있는 사용자가 입력한 '\n' 그리고 그 뒤에 scanf( )가 붙인 '\n'가 들어있는것을 확인 할수 있다. Hello를 모두 읽고 나면 버퍼에 여전이 '\n'이 남아 있는 것을 확인 할 수 있다. _cnt는 읽기 위해서 입력버퍼에서 남아 있는 문자의 개수 이다. _ptr은 입출력 포인터인데 이동하면서 읽고 난 ..
[C] sizeof() vs strlen() size_t strlen(const char *str) - 문자열의 길이를 반환한다. 이때 문자열의 마지막인 '/0'(null character)을 포함하지 않는다 - 에 포함되어 있다.size_t sizeof(const char *str) - 할당 된 버퍼의 크기를 반환한다. -에 포함되어 있다. #include #include int main() { char str[] = "Hello World!"; printf("strlen() :%d\n",strlen(str)); printf("sizeof() :%d\n", sizeof(str)); return 0; } 결과는 아래와 같다. sizeof()가 13인것은 문자열의 끝인 '/0'을 포함한 버퍼의 크기이기 때문이다. strlen() :12sizeof()..