2015-06-16 133 views
0

下面的程序詢問用戶名字,問候他,然後給我們他的真實ID。我們可以假設,如果使用16個字母的名字(或更長),uid變量將被覆蓋,程序會給我們提供不正確的用戶ID。但事實並非如此。如何使用gdb來解釋此問題?gdb調試UDI程序

#include <stdio.h> 
#include <unistd.h> 
#include <sys/types.h> 

struct user_info 
{ 
    uid_t uid; 
    char name[16]; 
}; 

int main(int argc, char *argv[]) 
{ 
    struct user_info info; 
    info.uid = getuid(); 

    printf("Your name: "); 
    scanf("%s", info.name); 
    printf("Hello, %s!\nYour UID id %d.\n", info.name, (int) info.uid); 
    return 0; 
} 

回答

1

改變你的結構像這樣

struct user_info 
{ 
    char name[16]; 
    uid_t uid; 
}; 

順序它將覆蓋爲您的期望。