EASY7
[C언어 23강] 포인터와 문자열 strcpy 본문
교수님께서 드디어 이메일을 보내셨다 ㅎㅎ
자, 힘내서 완강하자!
#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 |