sscanf
에 문제가 있습니다. 이를 확인하려면 나는 간단한 파일을 만든 그래서 컴파일 할 때이 :문자열이있는 sscanf의 이상한 동작
#include <stdio.h>
main(){
char *a;
/* */
char *s = "GET /something HTTP/1.1\r\n";
printf("sscanf: %d\n", sscanf(s, "GET %s HTTP", a));
printf("a: %s\n", a);
/* */
printf("sscan: %d\n", sscanf("GET /more HTTP/1.1\r\n", "GET %s HTTP", a));
printf("a: %s\n", a);
}
나는 오른쪽 출력 수 :
sscanf: 1
a: /something
sscan: 1
a: /more
을하지만 빈 주석 사이의 라인을 언급 할 때, 나는 얻을 노래한다 :
sscan: 0
a: (null)
질문 1 : 어떻게 그렇게 할 수 있습니까?
그리고 조금 더 : 나는 char *a = NULL
를 작성하는 경우, 내가 얻을 :
sscanf: 0
a: (null)
sscan: 0
a: (null)
질문 2 : 왜?
'a'에 메모리를 할당하지 않았으므로'sscanf'는 정의되지 않은 동작입니다. 첫 번째 경우에 작동하는 척하는 이유는 컴파일러 출력을 조사해야만 결정할 수 있습니다. –
몇 가지 설명 : 먼저 (Q2) 문제가 발생했습니다 (Q2)를 확인하면 문제 (Q1)이 나타납니다. 이 문제는'#pragma GCC diagnostic ... '없이'-Werror -Wall' 옵션을 사용하게하지 않습니다. –
@DanielFischer, 고맙습니다. 나는 사람을 심하게 읽었습니다! –