2013-03-05 98 views
2

下面的第一個printf調用打印出我的行。sscanf是否具有破壞性?

第二次調用printf會打印出空格。

發生了什麼事?

while (getline(&line, &size, config_file) != -1) { 

    printf("line: %s\n", line); 

    /* check to see if this line is a comment */ 
    char marker[1]; 
    sscanf(line, "%1s", marker); 

    printf("line: %s\n", line); 

    if (marker[0] == '#') { 
    . 
    . 
+1

那應該是'char marker [2];' – 2013-03-05 19:14:33

回答

4
sscanf(line, "%1s", marker); 

除了一個字符,你沒有指定它也存儲在一個\0終止。這顯然是不確定的,但我的猜測是\0覆蓋line

換句話說,需要至少2個字符寬度來存儲一個字符的字符串。

+0

哦哇,當然,無聲記憶腐敗的完美例子 – OregonTrail 2013-03-05 19:17:27