2014-10-06 122 views
0

我知道有BOF中的程序,但緩衝不與「AA」 exceded,那麼,爲什麼我得到「段錯誤」?...分段故障

$ gcc program.c -o program 
$ ./program AA 
Segmentation fault 

這是源:

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

void func(char *arg) 
{ 
    char name[32]; 
    strcpy(name, arg); 
    printf("\nWelcome, %s\n\n", name); 
} 

int main(int argc, char *argv[]) 
{ 
    if (argc != 2) 
    { 
     printf("Use: %s YOUR_NAME\n", argv[0]); 
     exit(0); 
    } 

    func(argv[2]); 
    printf("The end\n\n"); 

    return 0; 
} 

回答

1

取消引用空指針。 argv[argc]被定義爲NULL

我想你的意思是func(argv[1]);。數組索引從C中的零開始。

+0

失敗!爲什麼它沒有出現錯誤,因爲沒有初始化爲32 NULLS的名稱緩衝區? – 2014-10-06 00:58:30

+0

對空指針使用'strcpy'會導致未定義的行爲 – 2014-10-06 01:19:42