2014-10-06 119 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