2017-02-08 1 views
-1

나는 다음과 같은 코드 조각이있다.다음 c 코드가 devC++가 아닌 turbo c에서 작동하는 이유는 무엇입니까?</p> <pre><code>char *str; gets(str); </code></pre> <p>가 지금은 터보 C에서 작동하지만 devc에에 실패

devC++에서 작동되게하려면 다음을 추가해야합니다.

char *str = malloc(5); 

누구나 설명 할 수 있습니까?

또한 어느 쪽이 인증되고보다 정확한 코딩 형식인지를 나타냅니다.

+2

1) 사용하지 않는'gets()는'2) 할당되지 않은 문자열에 정의되지 않은 동작. –

+1

포인터에 할당 된 메모리가 없기 때문에 "터보 C에서 작동하는"이유는 수수께끼입니다. –

+0

당신은 ['gets'] (http://en.cppreference.com/w/c/io/gets)에서 읽을 수 있습니다. –

답변

0

char *str; 
gets(str); 

그냥 맞지 않을 수 있습니다. str은 초기화되지 않고 gets은 값으로 포인터를 수신하므로 내부적으로 할당 할 수 없습니다. 너 운이 좋았어/불행한 정의되지 않은 행동.

어느 것이 확실하고 올바른 코딩 형식입니까?

해당 사항 없음. gets을 사용하지 마십시오. 입력 크기를 제한 할 수 없으므로 안전하지 않습니다. (! 물론 할당 된 버퍼) 지정된 크기로 fgets를 사용

#include <stdio.h> 
char buffer[20]; 
fgets(buffer, sizeof(buffer), stdin); // reads at most 19 chars + null-termination 

또는 scanf을 크기 제한과 함께 (-1주의) : scanf("%19s",buffer);

관련 문제