Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[2518] Re:컴파일러 관련, 다시 질문드립니다. 소스 첨부했어요
최준호.스페로 [sparrow] 1193 읽음    2003-04-30 22:51
안녕하세요 스페로 입니다.

             Point = atol(strncpy(Temp3, Line+24, 3));     // 이익포인트
             Danga = atol(strncpy(Temp5, Line+16, 5));     // 단가
             Panme = atol(strncpy(Temp3, Line+21, 3));     // 판매량


             strncpy(rec[Cnt].Field01, Line+0, 6);     // 거래번호

이렇게 4군대에서 워닝이 발생하는데요

이유인즉 char * strncpy( char * , const char * , size_t )
이게 원형입니다.

워닝의 내용은 두번째 인자가 char **이라서 워닝이 된겁니다.

즉 두번째 인자 Line+24가 문제조
static char *Line[MAXLEN];

Line + 24라고 하면

Line은 배열의 포인터 (배열의 이름또한 포인터 즉 ** 이중 포인터가 됩니다.)

Line + 24대신 Line[] 방식으로 물론 안에는 인덱스가 들어 가야 겟죠

그럼 문제 해결에 실마리가 되었다고 생각합니다.




로터스 님이 쓰신 글 :
: 이번에 기사 시험을 보는데, Visual C++ 로 신청했거든요?
: 근데 교재는 터보 C밖에 없네요. Visual로 컴파일 하는데 자꾸 warning이 뜨고..
: 물어볼 사람도 없고 답답하네요.
: 도움 주시면 감사하겠습니다. 아래는 소스입니다.
:
: --------------------------------------------------------------------------------------------
:
: #include <stdio.h>
: #include <stdlib.h>
: #include <string.h>
:
: #define MAXLEN 256
:
: struct RecForm {
:      char       Field01[7];      // 거래번호(6 바이트)
:      long       Field02;         // 단가(5 바이트) * 판매량(3 바이트)
: } rec[1000];
:
: void main(int argc, char *argv[])
: {
:      static char *Line[MAXLEN];                             // 한 라인 저장
:      int  i, j, Cnt, Start, End;                           // 첨자(i,j,Cnt), 인수1, 인수2
:      FILE *Infp, *Outfp;                                   // 파일 포인터
:
:      static char Temp3[4], Temp5[6];                       // 숫자필드 임시저장
:      long Danga, Panme, Point;                             // 단가, 판매량, 이익포인트
:
:      static char ExTemp1[7];                               // 거래번호 정렬시 사용
:      long ExTemp2;                                         // (단가*판매량) 정렬시 사용
:
:      Start = atoi(argv[1]);                                // 첫번째 파라미터
:      End = atoi(argv[2]);                                  // 두번째 파라미터
:
:      // 입력파일을 입력전용(텍스트 모드)으로 연다.
:      Infp = fopen("abc0010.txt", "rt");   
:
:      Cnt = 0;                                              // 구조체 위치변수 초기화
:      // 입력부분(조건에 맞는 자료 배열에 저장)
:      for(i = 1; i <= End; i++) {
:     fgets(*Line, MAXLEN, Infp);
:          if(i >= Start) {
:             Point = atol(strncpy(Temp3, Line+24, 3));     // 이익포인트
:              Danga = atol(strncpy(Temp5, Line+16, 5));     // 단가
:              Panme = atol(strncpy(Temp3, Line+21, 3));     // 판매량
:
:              if(Point >= 30) {                             // 이익포인트 30 이상
:                  Cnt++;
:                  strncpy(rec[Cnt].Field01, Line+0, 6);     // 거래번호
:                  rec[Cnt].Field02 = Danga * Panme;         // (단가*판매량)
:              }
:          }
:      }
:
:      // (단가*판매량)의 값에 따라 정렬
:      for(i = 1; i <= Cnt-1; i++)
:          for(j = i+1; j <= Cnt; j++)
:              // 오름차순 정렬, 같은경우 거래번호의 오름차순 정렬
:              if((rec[i].Field02 > rec[j].Field02) ||
:                 ((rec[i].Field02 == rec[j].Field02) &&
:                  (strcmp(rec[i].Field01, rec[j].Field01) > 0))) {
:                    strcpy(ExTemp1, rec[i].Field01);        // 거래번호 교환
:                    strcpy(rec[i].Field01, rec[j].Field01);
:                    strcpy(rec[j].Field01, ExTemp1);
:
:                    ExTemp2 = rec[i].Field02;               // (단가*판매량) 교환
:                    rec[i].Field02 = rec[j].Field02;
:                    rec[j].Field02 = ExTemp2;
:              }    
:
:      // 입력파일을 닫는다.
:      fclose(Infp);
:
:      // 출력파일을 출력전용(텍스트모드)으로 연다.
:      Outfp = fopen("ans1.txt", "wt");
:      // 출력파일에 결과값을 출력한다. - 5번째 거래번호
:      fprintf(Outfp, "%d  %d  %s\n", Start, End, rec[5].Field01);
:      // 출력파일을 닫는다.
:      fclose(Outfp);
: }
:
: ---------------------------------------------------------------------------------------------
:
: 컴파일 하면 다음과 같은 compile 결과가 뜹니다...
:
: Compiling...
: p1.c
: C:\C_IT\Data\p1.c(35) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char ** '
: C:\C_IT\Data\p1.c(35) : warning C4024: 'strncpy' : different types for formal and actual parameter 2
: C:\C_IT\Data\p1.c(36) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char ** '
: C:\C_IT\Data\p1.c(36) : warning C4024: 'strncpy' : different types for formal and actual parameter 2
: C:\C_IT\Data\p1.c(37) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char ** '
: C:\C_IT\Data\p1.c(37) : warning C4024: 'strncpy' : different types for formal and actual parameter 2
: C:\C_IT\Data\p1.c(41) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char ** '
: C:\C_IT\Data\p1.c(41) : warning C4024: 'strncpy' : different types for formal and actual parameter 2
:
: p1.obj - 0 error(s), 8 warning(s)
:
:
: 물론 소스에 잘못된 부분은 없구요... 단지 이게 Visual C++ 에서도 컴파일이 됐으면
: 좋겠네요. 어떻게 하면 warning이 안뜰까요?
: 도움 부탁드립니다....

+ -

관련 글 리스트
2517 컴파일러 관련, 다시 질문드립니다. 소스 첨부했어요 로터스 1301 2003/04/30
2518     Re:컴파일러 관련, 다시 질문드립니다. 소스 첨부했어요 최준호.스페로 1193 2003/04/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.