zerofunc

사용자 정의 함수 응용 - 문자열 이어붙이기 (포인터) 본문

IT/C언어

사용자 정의 함수 응용 - 문자열 이어붙이기 (포인터)

0penster 2013. 11. 30. 04:15

이번 예제는 사용자 정의 함수를 이용한 (포인터도!)

Call By Reference이다

Reference란 참조라는 뜻이다.

말그대로

Call By Reference를 사용하면

다른지역에 있는 녀석을 갓다가 쓸수있다.


이것을 사용할때에는

메인에서 주소값을 주고

사용자 함수에서는 그것을 포인터로 받아야한다.

포인터로 받을때는 char *st혹은 ,char st[]또는 int *num 등으로 사용할수있다.

넘겨줄때는 주소를 넘겨줘야하므로

정수,실수형 변수일때는 &를 붙여서 주소를 줘야한다.

문자열같은경우엔 그냥 넘겨주면 맨처음 주소를 가르키기때문에

&를 안붙여도 된다.

그러한 이유로 scanf를 쓸때도 &를 빼고 입력을 받는것이다.

이번에 할 예제는 입력받은 수만큼 뒤에 s1뒤에 s2를 이어 붙이는거다

예제를 보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <conio.h>
 
char *str_ncat(char *s1, char *s2, int n){
    char *tmp=s1;
    while(*s1++);
    while(n--) {
        if(!(*s1++=*s2++)) {
            break;
        }
    }
    return tmp;
}
 
void main(){
    char arr1[100]={0,};
    char arr2[100]={0,};
    int n;
 
    printf("s1 : ");
    gets(arr1);
 
    printf("s2 : ");
    gets(arr2);    
 
      printf("이어 붙일수:");
      scanf("%d",&n);
 
    printf("%s",str_ncat(arr1,arr2,n));
    getch();
}
 
 
cs


위의 예제를 보자면

char형으로 선언해 char형으로 리턴을한다.

gets(s1)을 통해 입력받은걸 arr1에 넣어준고 arr2도 똑같이 한다음에

str_ncat을 써서 arr1과 arr2와 입력받은 수를 넘겨준다.

char *tmp로

s1의 위치를 백업해논다.

그다음

while(*s1++); 이것은

s1이 NULL이될때까지 주소를 더하는것이다.

while(n--){

if(!(*s1++=*s2++))

break;

}

이것은 입력받은 수만큼

while문을 수행하면서

if(!(*s1++=*s2++))  이것은

s1은 지금 NULL값이 위치했기에

s1의 s2의 현재 값을 넣는다.

그리고 그값이 NULL(s2의 끝) 이라면 break로 탈출하고

아니면 n이 0이될때까지 반복이된다.




'IT > C언어' 카테고리의 다른 글

사용자 정의 함수 - 작은값  (0) 2013.11.30
반복문 응용 - 최대값구하기 ! (삼항연산자)  (0) 2013.11.30
반복문 - for문  (0) 2013.11.30
반복문 - While  (0) 2013.11.30
C언어 기초 - 연산자  (0) 2013.11.29
Comments