2012-10-13 2 views
-4

가능한 중복 : 다음 코드는 제대로 I 입력 (수율 "5"를 작동
What’s wrong with strcpy()? (Segmentation fault)런타임 오류 루프에서 INT N = 나 strlen (...)를 사용하는 경우

char* tekst; 
scanf("%s", tekst); 
int n=strlen(tekst); 
printf("%d", n); 

을하지만 다음 :) "ABCDE"

char* tekst; 
scanf("%s", &tekst); 

int n=strlen(tekst); 

while(n--) 
    { 
     printf("%d", n); 
    } 

은 내가 입력 한 문자열에 대해 런타임 오류가 발생합니다. 문제가 무엇입니까?

+1

'strlen()'주위에 루프가 보이지 않습니다. – alk

답변

0
char *tekst; 
scanf("%s", &tekst); 

이 잘못되었습니다. 대신해야 할 일

char tekst[100]; 
scanf("%s", tekst); 

대신에해야합니다. 글쎄, 안전하지 않기 때문에이 작업을해서는 안되지만 적어도 이것은 scanf()의 올바른 사용법입니다. 설명서를 읽으십시오.

0

문자열에 char *tekst을 지정하려고했습니다. 그러나 scanf가 그것을 지정하려 할 때, tekst는 당신이 쓸 수없는 임의의 메모리 세그먼트를 가리킬 것입니다.

malloc으로 문자를 할당 할 수 있지만 나중에 해제하거나이 구문 char tekst[100]을 사용하여 배열을 만들어야합니다.

어쨌든 사용자가 100자를 초과하여 입력하면이 배열이 오버플로 될 위험이 있습니다. scanf("%99s", tekst);

첫 번째 예제는 "행운"때문에 충돌하지 않지만 충돌이 발생할 수있는 정의되지 않은 동작을 생성하고 있습니다.