У меня проблема с 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), проблема (Q1) появилась, когда я проверил (Q2). Эта проблема не позволяет мне использовать опции '-Werror -Wall' без' #pragma GCC диагностики ... ' –
@ DanielFischer, спасибо, я плохо прочитал человека! –