2014-11-16 10 views
0
int _tmain(int argc, _TCHAR* argv[]) 
{ 
char string1[20], append_string[40]; 
char *string2 = "APPENDED"; /* string to be appended */ 

/* prompt for string 1 */ 
printf("Enter string1: "); 
scanf_s("%s", &string1); 
while (!strcmp(string1, "done") == 0) 
{ 
    printf("Before append. \nString1: %s \nString2: %s\n\n", string1, string2); 
    mystrappend(string1, string2, append_string); 
    printf("After append. \nString1: %s \nString2: %s \nAppended string: %s\n\n", string1,   string2, append_string); 

    // prompt for string 1 
    printf("Enter string1: "); 
    scanf_s("%s", &string1); 
    } 

return 0; 
} 

왜 입력하지 않고 String1을 저장하지 않습니까?
나는 stdio.h, conio.h, string.hstdafx.h의 헤더 파일을 가지고 있습니다. the documentation of scanf_s 인용왜 내 문자열에 아무 것도 저장하지 않습니까?

+2

어떻게'mystrappend'이 구현처럼

을 찾아야한다? –

+0

Atm, 아직 작업 중이지만, 뭔가를 입력 할 때 비어있는 String1이 내부에 뭔가 있더라도? 내 말은 –

+4

입니다. 나는 당신의'scanf_s' 호출이'scanf_s ("% s", string1)'배열의 주소를 가져서는 안된다고 생각합니다. –

답변

0

,

비고 :

[...] scanfwscanf, scanf_swscanf_s 달리

모든 입력 파라미터에 대해 지정되는 버퍼 크기를 필요 유형 c, C, s, S 또는 []에 포함 된 문자열 컨트롤 집합 문자 버퍼 크기는 버퍼 또는 변수에 대한 포인터 다음에 추가 매개 변수로 전달됩니다.

  1. %schar* 기대,하지만 당신은 유형 char(*)[20]이다 인수 &string1을 제공 : 그래서

scanf_s

scanf_s("%s", &string1); 

는 두 가지 이유로 잘못되었습니다. 이로 인해 정의되지 않은 동작이 발생합니다.

  • 위의 인용문에서 볼 수 있듯이 버퍼의 크기를 나타내는 세 번째 인수를 전달해야합니다.
  • &string1 대신 string1을 사용하여 문제 # 1을 해결했습니다. string1은 첫 번째 요소 (char*)에 대한 포인터로 "감소"합니다.

    sizeof 또는 _countof을 사용하는 버퍼의 크기를 나타내는 세 번째 인수를 사용하여 문제 # 2를 수정하십시오. 이러한 문제를 해결 한 후에는 scanf_s

    scanf_s("%s", string1, sizeof(string1)); 
    

    또는

    scanf_s("%s", string1, _countof(string1)); 
    
    관련 문제