unix /putty로 학교서버 접속 교육과정 코드 질문

조회수 475회
 cmd.c: 359 :10 : warning : format '%s' expects argument of type 'char *' , but argument 2 has type 'int' [-Wformat=] 
printf("<%s> %d: ", cmd_count);

cmd.c:359:10 warning: format '%d' expects a matching 'int' argument [-Wformat=]

라고 에러가 뜨는데요.. 제 cmd.c에있는 소스 내용이 printf("<%s> %d: ", cmd_count); 이런 구문이 있는데 하려고 하는 목적은 문자열 정수 받아와서 프로그램을 실행시키면 1> ls 2> cp sdfdsf 3> ~~ 4>~~ 이런식으로 숫자를 증가시킬려고 cmd_count를 1++시켜주고 포문안에 저 printf("<%s> %d: ", cmd_count);구문을 넣어놧는데 저게 왜 받아오지못하고 에러가 뜨는지 모르겠습니당..

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • printf 함수의 원형을 먼저 봅시다.

    #include <stdio.h>
    int printf(const char * restrict format, ...);
    

    위와 같이 생겼습니다. ... 라는 것은 가변 변수라는 것으로 여러개를 입력할 수 있습니다.

    printf 는 서식.즉 템플릿형태를 지원해줍니다.

    지원하는 형식은 % 기호와 타입을 나타내는 알파벳을 조합하여 사용합니다.

    즉 %s 는 문자열 변수를 치환 할 수 있다는 의미 입니다.

    아래와 같이 사용할 수 있습니다.

    printf("%s 입니다.", "allinux");
    출력: allinux 입니다.
    

    질문자가 올린 코드를 봅시다.

    printf("<%s> %d: ", cmd_count);
    

    일단 템플릿 문자열인 <%s> %d: 을 보면 %s, %d 로 2개가 있습니다.

    즉 변수 두개를 치환하겠다는 의미입니다. 그러나 질문자는 cmd_count 라는 변수 1개만 등록했으므로 오류가 발생합니다.

    아래와 같이 순서대로 문자열변수 혹은 값, 정수형변수 혹은 값 이렇게 두개를 등록해야 합니다.

    printf("<%s> %d: ", "문자열변수", 10);
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)