none
c언어 질문좀 ㅜㅜ RRS feed

  • 질문

  • #include<stdio.h>

    void main()
    {
    char one_char = 'a';
    char string1[] = "Hello World";
    char *string2 = "hello world";
    char string3[12] = "hello world";
    char string4[6] = { 'h', 'e', 'l', 'l', 'o', '\0' };

    printf("%c\n", one_char);
    printf("%s\n", string1);
    printf("%s\n", string2);
    printf("%s\n", string3);
    printf("%s\n", string4);
    }

    여기서 char *string2 = "hello world"; 이 문장에 *이 들어가있는데 이거 빼고 실행하면 하다가 오류발생하더라구요. 컴파일상에는 분명히 성공이라고나오는데 왜그런거죠..?

    2016년 3월 28일 월요일 오후 4:39

모든 응답

  • 그러니까, 다음과 같이 썼는데,

    char string2 = "hello world";

    컴파일이 된다는 것인가요?

    2016년 3월 29일 화요일 오전 12:47
  • 1>------ 빌드 시작: 프로젝트: ConsoleApplication6, 구성: Debug Win32 ------
    1>  main.c
    1>c:\users\administrator\documents\visual studio 2015\projects\consoleapplication6\consoleapplication6\main.c(7): warning C4047: '초기화 중': 'char'의 간접 참조 수준이 'char [12]'과(와) 다릅니다.
    1>c:\users\administrator\documents\visual studio 2015\projects\consoleapplication6\consoleapplication6\main.c(13): warning C4477: 'printf' : 서식 문자열 '%s'에 'char *' 형식의 인수가 필요하지만 variadic 인수 1의 형식이 'int'입니다.
    1>  ConsoleApplication6.vcxproj -> c:\users\administrator\documents\visual studio 2015\Projects\ConsoleApplication6\Debug\ConsoleApplication6.exe
    ========== 빌드: 성공 1, 실패 0, 최신 0, 생략 0 ==========

    맨 밑에 성공1만 보고 제대로된줄알았네요.

    *이 왜 들어가야되나요??

    2016년 3월 29일 화요일 오전 10:24
  • 아... C 언어 컴파일로 하면 경고만 발생하고 마는 군요. ^^ C/C++ 컴파일로 하면 그런 경우 좀더 엄격하게 형식 검사를 하기 때문에 경고가 아닌 오류로 처리합니다.

    '*' 가 들어가야 하는 이유는 char 타입은 -127 ~ +128 까지의 값만 담을 수 있기 때문입니다. '*'를 쓰면 포인터가 되고 메모리의 주소를 담는 역할로 바뀌게 됩니다. 좀 더 자세한 것은 포인터 관련해서 C 언어 책을 읽어보시면 도움이 됩니다. (포럼에서 단순하게 답변할 수 있는 내용이 아닙니다.)

    2016년 3월 29일 화요일 오후 12:30