2014-10-27 30 views
-4

我是新來的,我似乎無法理解你能幫我找出可能溢出的緩衝區,爲什麼?什麼是可以溢出的緩衝區的名稱buf,msg,len或out

#include <stdio.h> 
#include <string.h> 

#define S 100 
#define N 1000 

int main(int argc, char *argv[]) { 
    char out[S]; 
    char buf[N]; 
    char msg[] = "Welcome to the argument echoing program\n"; 
    int len = 0; 
    buf[0] = '\0'; 
    printf(msg); 

    while (argc) { 
     sprintf(out, "argument %d is %s\n", argc-1, argv[argc-1]); 
     argc--;`` 
     strncat(buf,out,sizeof(buf)-len-1); 
     len = strlen(buf); 
    } 
    printf("%s",buf); 
    return 0; 
} 
+3

首先,如果你在這裏發佈代碼,請正確縮進它。這太難讀了。然後,我們不在這裏做你的功課。要解決這個問題,請檢查寫入其中一個緩衝區的所有函數,並考慮可能溢出的情況。 – 2014-10-27 09:15:37

+1

'len = strlen(buf);'似乎支付線性問題的二次成本。 – 2014-10-27 09:19:40

+0

@KerrekSB非常感謝你在那條線上 – NINJAGAIDEN 2014-10-27 09:30:34

回答

0

的問題是在這裏:

sprintf(out, "argument %d is %s\n", argc - 1, argv[argc - 1]); 

當你面對一個問題,像這樣的,它總是一個好主意,通過你的代碼註釋行,直到程序停止崩潰。然後你會知道錯誤在哪裏:D