2017-03-02 4 views
-3

교수님의 예를 들어 '좀비 변환기'코드가 있습니다. 내가 말할 수있는 것에서 그것은 일련의 영어 단어를 취하고 함수를 통해 몇 가지 규칙을 적용합니다. 이 작업을 수행하는 데 현재 strcpystrcat이 사용되지만, strcpy_s으로 변경하더라도 컴파일되지 않습니다. 여기에, (공간을 위해) 다른 기능을 포함하지 않고 예를 들어 그래서 더 구체적으로char 사용시 폐기 된 strcpy/strcat 대체물 *

int main() 
{ 
char english[MAX]; 
char zombie[MAX]; 
char zombie_word[MAX]; 
int pos_e; /* Current position in english line of text */ 
int pos_z; /* Current position in line of translated zombie text */ 

while (1) { 
    pos_e = 0; 
    pos_z = 0; 
    strcpy(zombie, ""); 

    cout << ("Enter English text: "); 
    cin >> english; 

    /* This loop translates the line from english to zombie. */ 
    do 
    { 
     get_next_word(english, &pos_e, zombie, &pos_z); 

     translate_word(english, &pos_e, zombie_word, &pos_z); 

     strcat(zombie, zombie_word); 

    } while (pos_e < strlen(english)); 

    print_translation(zombie); 
} 
return 0; 
} 

로 내 주요 기능은 내가 무슨 라인에해야 strcat(zombie, zombie_word);는 2015 비주얼 스튜디오에서 제대로 컴파일하게입니까?

학년을위한 것이 아니며, 나는 중간 고사 전에 이것을 이해할 수 있기를 정말로 원합니다. 그리고 그걸 가지고 놀기가 약간 어렵습니다. 나는 비슷한 것을 할 필요가있을 때 무엇을해야 할지를 알기 위해 _CRT_SECURE_NO_WARNINGS를 통해 그것을 비활성화하지 않는 것을 선호합니다.

아마도 char 변수를 문자열이나 그와 비슷한 것으로 변경해야할까요? 잠시 둘러 보았고 실제 프로세스를 찾을 수 없습니다. 도움을 주셔서 감사합니다. 시간을 내 주셔서 감사드립니다. Microsoft에서

+1

문제점을 strcpy_s와 (와) 공유 할 수 있습니까? C++에 대한 더 나은 솔루션은 std :: string이지만, 어떤 단계에서 strcpy_s를 사용하는 방법을 알아야 할 수도 있습니다. –

+0

C++에서 옳은 대답은 거의 언제나'char *'를'std :: string'으로 변환하는 것이지만'strcat'와 친구들을 _s 버전으로 대체했을 때 관심이 없으면 무엇이 잘못 됐습니까? 두 가지의 차이점을 알아 보려면 [documentation page] (https://msdn.microsoft.com/en-us/library/d45bbxx4.aspx)를 읽었습니까? – user4581301

+0

내 오류가 다른 함수 내에있는 것 같습니다. strcpy_s 오류 메시지 : 오버로드 된 함수의 인스턴스가 없습니다. "strcpy_s"는 인수 목록과 일치합니다. – lana

답변

0

는 : strncat_s

당신은 버퍼 오버 플로우의 위험을 방지하기 위해 배열의 길이를 포함해야합니다.

이 API는 다음

errno_t strncat_s( 
    char *strDest, 
    size_t numberOfElements, 
    const char *strSource, 
    size_t count 
); 

numberOfElements 목적지 어레이의 크기이다.

+0

조금 더. 'strncpy_s'는 overflow, truncate, crash, custom handler를 어떻게 처리 할 것인가에 대한 추가적인 옵션들을 가지고 있습니다 ... – user4581301

+0

'''strncpy_s (zombie, "");''' 은 이제 오류를 일으 킵니다 : 함수 "strncpy_s"는 인수 목록과 일치합니다. 나는 오해에 대해 사과드립니다. 배열의 길이를 paranthesis 안에 넣어야합니까? – lana

+0

감사합니다. 지금 일하고있어. – lana