我遇到了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'是未定義的行爲。爲什麼它假裝在第一種情況下工作只能通過調查編譯器輸出來確定。 – 2013-03-14 15:57:40
一些解釋:首先我有一個問題(Q2),當我檢查(Q2)時問題(Q1)出現了。這個問題不允許我使用選項'-Werror -Wall'沒有'#pragma GCC診斷...' – 2013-03-14 15:58:54
@DanielFischer,謝謝,我讀過男人了! – 2013-03-14 16:01:44