C언어 문자열 2 출력과 포인터
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”)를 하면 텍스트세그먼트인 문자열을 데이터 세그먼트인 배열에 넣으므로 실행 가능하다
즉 문자열과 그 문자열이 어디에 저장되는가에 집중해 데이터세그먼트와 텍스트세그먼트를 잘 구분해야한다.