2013-05-18 1 views
-1

나는이 책을 읽고이 예제를 컴파일 할 수 없습니다. 어떤 제안? 미리 감사드립니다. 2,011합니다 (C 2011 표준) 다음 strcpy_s() 기능 TR 24731-1 (Do you use the TR 24731 'safe' functions 참조)로 정의하고, 또한, 9899 ISO/IEC의 옵션 부록 K로되어'strcpy_s'에 대한 정의되지 않은 참조는 컴파일 할 수 없습니다.

/tmp/ccc5KZDZ.o: In function `main': 
test.c:(.text+0x48): undefined reference to `strcpy_s' 
collect2: error: ld returned 1 exit status 
+0

http://en.wikibooks.org/wiki/C_Programming/C_Reference/string.h/strcpy 귀하의 (g) libc에서 지원하지 않을 수 있습니다. – yoones

답변

5

1 #define __STDC_WANT_LIB_EXT1__ 1 
    2 #include <string.h> 
    3 #include <stdio.h> 
    4 
    5 
    6 int main(void) 
    7 { 
    8   char source[] = "Here we go..."; 
    9   char destination[50]; 
10 
11   if(strcpy_s(destination, sizeof(destination), source)) 
12     printf("An error occurred copying the string.n"); 
13 
14 
15   return 0; 
16 } 

오류. 이 기술 보고서에 적합성을 나타 내기 위해 의도

__STDC_LIB_EXT1__ 정수 상수 200509L :

당신은 당신의 구현으로 지원 여부를 테스트 할 수 있습니다.

(TR에 따름). 부록 K는 단순히 말한다 : __STDC_LIB_EXT1__을 정의

구현은이 부속서의 사양을 준수하여야한다. __STDC_LIB_EXT1__를 정의하지 380)

380) 구현은 이러한 사양을 준수 할 필요가 없습니다. 이 answer

는 C 2011 표준에 대한 TC1 (기술 정오표 1) 함수의 부속서 K 버전 __STDC_LIB_EXT1__가 201112L (2,011 진수)이어야한다는 것을 나타낸다 정의한다. Annex K와 TR 24731-1의 차이점을 추적하지 못했습니다.

__STDC_LIB_EXT1__을 테스트하여 라이브러리가 strcpy_s()을 지원하는지 테스트 할 수 있지만 선택 사항입니다. 울리히 드 리퍼 (Ulrich Drepper)는 GNU C 라이브러리가 TR 24731-1 기능을 지원하지 않을 것이라고 분명하게 선언했다. 나는 그것이 아직도 있는지 여부를 모른다.

또한 이러한 기능 중 일부에 대한 Microsoft 인터페이스는 동일한 기능 (예 : vsnprintf_s())에 대한 표준 인터페이스와 다릅니다. 이는 플랫폼 간 이식성 도구로서의 유용성을 제한합니다.

+0

답장을 보내 주셔서 감사합니다 :) – medis