title: “C언어 문자열 2 출력과 포인터” categories:

  • C

    #C언어 문자열 2 출력과 포인터 : 네이버 블로그

문자열의 출력에는 다양한 방법이 있다.

저번 포스팅에서 다뤘듯이 문자열은 배열이므로 배열의 인자를 하나씩 출력해도 된다.

​

제일 편리한 방법은 문자열 형식 지정자 %s를 쓰는 방법이다.

​

아래 예제를 보자

#include
int main() {
 char str[] = "Hello, world!\n";
 for (int i = 0; str[i]!='\0'; i++)
 {
 printf("%c", str[i]);
 }
 printf("%s",str);
 printf(str);
}

첫번째 출력은 반복문으로 str 배열이 NULL문자가 나올때까지 1씩 증감하며 반복한다.

두번째 출력은 %s 형식 지정자를 쓰면서 str을 출력한다

세번째 출력은 printf에 바로 str을 전단한다.

​

필요에 맞춰 다양한 방법으로 출력할 수 있다.

​

전에 배열부분에서 배열의 이름은 포인터라는 이야기를 했다.

문자열도 마찬가지로 포인터로 이름 을 가진다.

그러나 일반 배열과는 다르게 문자열은 메모리의 영역 중 텍스트 세그먼트에 저장된다.

텍스트 세그먼트는 읽기는 가능하지만 변경할 수 는 없다.

​

즉

char *p =”Hello, World!”는 Hello world라는 텍스트 세그먼트에 저장된 주소를 p데이터 세그먼트 에 옮긴 것이다

이후 p=”How are you”는 “How are you”라는 텍스트 세그먼트에 저장된 문자열을 데이터 세그먼트 p에 옮긴 것이므로 가능하다

​

그러나 strcpy(p,”Goodbye”)는 “Goodbye”라는 문자열을 텍스트 세그먼트 “Hello world”에 넣는 것이므로 실행 오류가 난다.

​

추가로 char p[]=”Hello world!”를 하면 데이터세그먼트인 배열 내에 문자열이 저장되므로

strcpy(p,”Goodbye”)를 하면 텍스트세그먼트인 문자열을 데이터 세그먼트인 배열에 넣으므로 실행 가능하다

​

즉 문자열과 그 문자열이 어디에 저장되는가에 집중해 데이터세그먼트와 텍스트세그먼트를 잘 구분해야한다.

​

​

​

업데이트: