반응형

c언어에서 문자열을 출력하고자 할 때는

단순히 printf("문자열"); 과 같은 형식으로 만 적어 주면 되었습니다.

하지만 이럴 경우 저 문자열의 내용은 수정이 불가능 한 문자열 상수입니다.

 

프로그램이 실행 되어 있는 상태 즉 개발자가 아닌 사용자가 내용을 입력하고 수정하려면 문자열 변수를 이용해야 지만

c언어에는 따로 문자열을 위한 변수형은 존재 하지는 않습니다.

대신 문자열을 배열에 담아 처리하고 이를 문자열 변수라고 칭합니다.

그리고 printf() 함수나 scanf()함수에서는 %s라는 형식지정자를 지원해 줍니다.

 

 

@ 문자열 변수

"Hello World"를 변수에 담아 출력하는 방법들에 대하여...

#include <stdio.h>

int main()

{

    char msg[]="Hello World";

    printf("%s \n",msg);

    return 0;

}

%s라는 형식 지정자 덕분에 반복문을 사용하지 않고 배열속의 문자열을 출력 할 수 있습니다.

 

반복문을 사용해서 배열 속의 내용을 출력할 수도 있습니다.

#include <stdio.h>

int main()

{

    int i;

    char msg[]="Hello World";

 

    for(i=0;i<5;i++)

    printf("%c",msg[i]);

    return 0;

}

World는 어디론가 도망가버리고 Hello만 출력 되었습니다.

이렇듯 문자열 변수를 사용하면 문자열에서 필요한 부분만을 따로 작업 할 수 있습니다.

 

scanf()함수로 문자열 입력 받기

#include <stdio.h>

int main()

{

    int i;

    char msg[20];

 

    scanf("%s",msg);

 

    

    printf("입력 받은 문자 : %s\n",msg);

    return 0;

}

scanf("%s",msg);

평소 일반적으로 숫자를 입력 받을 때와 무언가 차이가 있습니다..발견 하셨나요?

바로 변수명 앞에 &(주소연산자)가 없습니다.

scanf함수에서는 변수의 주소, 배열의 시작주소를 인자로 넘겨주게 되는데

배열의 이름, 위 소스에서는 msg가 배열의 첫 주소를 나타내기 때문에 주소 연산자를 붙이지 않습니다.

 

띄어 쓰기를 하지 않았는데 이유는?

scanf()로 문자열을 입력 받을 때 띄어쓰기를 해버리면 띄어쓰기 한 바로 앞까지만 배열에 저장됨.

소스는 위 소스와 동일합니다.

그런데 결과 값이 다르게 나왔네요..

실제 저장된 부분이 띄어쓰기한 앞부분 ITnG까지가 전부이기 때문에..ITnG만 출력 되었습니다

 

그럼 띄어쓰기 된 문장을 입력 할 수는 없는가?

아닙니다. 방법이 있습니다.

먼저 scanf() 함수를 이용한 띄어쓰기 입력 법

출처 : http://blog.naver.com/smhotkdg?Redirect=Log&logNo=60130819707

#include <stdio.h>

int main()

{

    int i;

    char msg[20];

 

    

    scanf("%[^\n]",msg);

      

    

    printf("입력 받은 문자 : %s\n",msg);

    return 0;

}

자세한 설명을 출처를 참고해 주세요..

저도 검색을 통해 알게 된 내용^^;

 

다만 일반적으로는 공백까지 입력 받을 땐 gets() 함수를 이용합니다.

 

 

gets() 함수이용 공백포함 문자열

gets()함수 역시 <stdio.h>에 선언되어 있기 때문에 별도의 처리가 필요하진 않습니다.

#include <stdio.h>

int main()

{

    int i;

    char msg[20];

 

    gets(msg);

    

    printf("입력 받은 문자 : %s\n",msg);

    return 0;

}

굉장히 간단하죠?

 

 

위에서는 문자열을 담을 배열을 선언함과 동시에 초기화 하거나

    char msg[]="Hello World";

 

scanf(), gets() 함수를 이용해서 입력 받았습니다.

 

만약에 문자열을 담을 배열을 선언만 해놓고 추후 값을 입력할 때

일반적으로 숫자를 다룰 때 처럼 하면 오류를 보시게 될 것입니다.

 

char msg[10];

msg="hong gil dong";

 

위와 같이 하면 오류가 발생하게 됩니다.

하지만 이런 방식으로 밖에 값을 넣을 수 없는 경우가 반드시 존재하게 됩니다.

그럴 때는 문자열 함수들을 이용해야 하는데...다음에 이 시간에;;

반응형

'Computer > Programing' 카테고리의 다른 글

c언어 문자열(2) _ 문자열 관련 함수  (0) 2013.12.26
c언어 2차원 배열  (0) 2013.12.21
c언어 포인터를 이용한 스왑함수 구현  (2) 2013.12.14

+ Recent posts