BLOG main image
분류 전체보기 (129)
새소식 (NEWS) (2)
일상 + 생활 (21)
n e w + i s s u e (10)
노래가 있는 이야기~♪ (11)
Make + Food (0)
여행 (1)
Tips & Tech (31)
C Programming (9)
운영체제(O.S) (20)
TroubleShootings (5)
JSP (0)
IT 관련 용어 및 설명 (7)
Reverse Engineering (0)
Michael Kors Handbags Outlet
Michael Kors Handbags Outlet
michael kors bag
michael kors bag
michael kors laptop bag
michael kors laptop bag
michael kors crossbody bags
michael kors crossbody bags
Michael kors handbags
Michael kors handbags
2,758,208 Visitors up to today!
Today 1,969 hit, Yesterday 3,600 hit
daisy rss

who's online
tistory 티스토리 가입하기!
'2008/12'에 해당되는 글 1건
2008.12.28 23:01

문자열 포인터 테스트를 하기 위한 소스를 작성.
아직도 포인터는 부끄럽게도 좀 많이 헷갈린다..
어느분의 표현을 빌리면 알았다 싶다가도 뒤돌아서 다시 보면 또 원점인 것 처럼..
첫 술에 배부르랴..끊임없이 갈고 닦자..


이번에 작성한 소스는 문자열 포인터 테스트 중 시스템 파라미터로 입력한 문자열을 출력하고 문자열을 역순으로 다시 출력하는 비교적 간단한 소스.

프로그램 시작
  - 인수가 2개 미만인가?
    - argv[1] 배열에 담은 내용을 *p에 옮김.
      - 문자열 출력
        - 문자열의 끝(NULL or '\0')을 카운트하여 길이를 구한다.
          - 길이서 감산연산을 통해 문자열을 역으로 출력.

다음은 소스이다.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
        char *p;
        int i;

        // Argument count
        if(argc < 2)
        {
                printf("Usage : %s <String>\n\a", argv[0]);
                exit(0);
        }

        // Address copy
        p = argv[1];

        // Print String
        printf("argv[1] = %s, ADDRESS = %p\n", argv[1], argv[1]);
        printf("p       = %s, ADDRESS = %p\n", p, p);
        printf("*p(%c) *p+1(%c)\n", *p, *(p+1));

        printf("Loop print : ");
        for(i=0; *(p+i) != '\0'; i++)                  // *(p+i) != NULL 에서 변경
        {
                printf("%c", *(p+i));
        }
        printf("\n");

        /* Print Reverse String */
        // init item number
        i = 0;
        
        // Count String number
        do {
                if(*(p+i) == '\0')                            // *(p+i) == NULL 에서 변경
                        break;
                ++i;
        }while(1);
        printf("String length is %d\n", i);

        // Print Reverse String
        do {
                if(i < 0)
                        break;
                else
                        printf("%c", *(p+i));
                i--;

        } while(1);
        printf("\n");

        return 0;
}
-bash-3.1# gcc -o re_str string.c -W -Wall
-bash-3.1# ./re_str Young

그런데 소스를 컴파일 했을 때 다음과 같은 메시지가 발생!

warning: comparison between pointer and integer

아.. 자세히 보니 문자열의 끝을 확인하는 라인에서 문제가 발생했다.
대충 찾아보니 char 타입과 숫자형 타입의 차이에서 나는 경고차원의 메시지였다.
꺼림찍하여 NULL의 다른 표현인 \0으로 변경을 해보기로 하고 컴파일을 해보니 경고가 없어졌다.
해결법은 NULL'\0'으로 변경하여 해결!!



 

신고
Creative Commons License
Creative Commons License
   

Favicon of http://vocal2th.tistory.com DanLee | 2009.07.23 01:10 신고 | PERMALINK | EDIT/DEL | REPLY
좋은 정보 감사합니다.
제블로그에 링크좀 걸어 놓을께요 ^^
Favicon of http://telpitz.tistory.com 그대내맘에들어오면은 | 2009.08.24 13:30 신고 | PERMALINK | EDIT/DEL
좋은정보가 되었다니 저야말로 감사합니다.^^
Favicon of http://oer.freerunso.com/ Nike Free Run 3.0 | 2013.04.07 07:29 신고 | PERMALINK | EDIT/DEL | REPLY
당신 매력있어, 자기가 얼마나 매력있는지 모르는게 당신매력이야
Cheap Oakley Sunglasses | 2014.08.13 09:56 신고 | PERMALINK | EDIT/DEL | REPLY
TextGSText [url=http://www.plzsupport.com/?Cheap-Oakley-Dangerous.html]Cheap Oakley Dangerous[/url] [url=http://www.plzsupport.com/?Oakley-Sun-Glasses.html]Oakley Sun Glasses[/url] [url=http://www.plzsupport.com/?Oakley-Twenty.html]Oakley Twenty[/url] .
Name
Password
Homepage
Secret
prev"" #1 next

티스토리 툴바