EASY7

[C언어 23강] 포인터와 문자열 strcpy 본문

개발 공부/C

[C언어 23강] 포인터와 문자열 strcpy

E.asiest 2016. 7. 12. 18:57

교수님께서 드디어 이메일을 보내셨다 ㅎㅎ

자, 힘내서 완강하자!

 

#include<stdio.h>

void main()

{

int arr[5]={1,2,3,4,5};

int *p_1, *p_2;

p_1=arr; 

p_2=p_1+2;

printf("p_1 =%d p_2= %d \n", p_1,p_2 );

printf( "두 공간의 차이 %d \n", p_2-p_1);

}

 

결과

p_1=1440992 p_2=1441000

두공간의 차이 2 /*2칸차이가 나기에*/

 

printf("%d", int p_2- int p_1);하면 8이 나옴.

 

 

주소값에 대한 오해

ox00000000이 1byte(8bits)이다.

char은 1byte이다.

2^8은 256이고  

문자배열과 포인터

문자배열 자체는 문자열의 시작주소값을 가짐

char *arr; 와  char arr[0]; 는 같은 말

 

#include<stdio.h>

void main()

{

char strarr[]="wonderful";

char *arr="world";

printf("%s",strarr);

printf("%s",arr);

}

strarr은 wonderful의 첫째 원소의 주소값을 저장함.

arr은 world의 첫째 원소의 주소값을 저장함.

\0을 만날 때까지 읽어라!

 

문자열을 복사하는  char strcpy(char *대상, char *원본);

#include<stdio.h>

#include<string.h>

void main()

{

char arr[10];

char *p="seoul";  또는 char p[]="seoul";해도 됨.

strcpy(arr,p);

printf("배열 arr복사결과 %s\n",arr);

 }

1byte인 10칸 방을 만들어놓음

s의 주소값을 p에 저장

arr에 p복사

arr 출력하면 seoul나옴

 

하지만

int *p;

strcpy(p,"wonderful");

printf("%s", p);

하면 에러남. p에 공간확보가 안되어있기때문에 초기화를 하지 않

 

char *p;

p=malloc(20);

strcpy(p,"wonderfulworld");

 

처음에는 공간확보 안 되어있다가 컴파일할때 20byte할당

memory allocation

 

배열 선언할때 \0도 세야하나? 

보통 배열은 \0필요없어서 안세는데

문자배열은 세야해

 

#include<stdio.h>

#include<string.h>

void main()

{

char arr[3][10] ={"wonderful","world","wow"};

또는

char *arr[3]={"wonderful","world","wow"}; 하면 메모리낭비를 하지않는다.

int i;

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

printf("%s\n",arr[i]);

}

이중for할 필요없다

왜냐하면 문자열은 첫째 문자 w부터 \0까지 읽기 때문에 숫자배열과 다르다.

 

 

 

'개발 공부 > C' 카테고리의 다른 글

[C언어 25강] 함수포인터  (0) 2016.07.13
[C언어 24강] 함수와 포인터  (0) 2016.07.13
[C언어 22강] 포인터 배열  (0) 2016.07.12
[C언어 21강] %출력 형태  (0) 2016.07.12
[C언어 20강] 포인터식 / 배열  (0) 2016.07.12
Comments