作者:
proud (hc)
2015-05-29 21:06:48出現問題的code如下
if(argc==3){
if( strcmp(argv[1], "-g") == 0 ){
struct group *data;
char gp[50];
int i=0;
strcpy(gp, argv[2] );
data = getgrnam("gp");
If(data != NULL){
while(data -> gr_mem[i]){
printf("%s\n",data->gr_mem[i++]);
}
}
}
}
compiler沒有問題.但想要執行這段的時候顯示
Segmentation fault (core dumped)
我試過把strcpy這行改成strncpy(gp, argv[2],10 );
但還是一樣
想請問是哪裡出了錯誤?
作者:
dracb (伊達政宗)
2015-05-29 21:08:00argc==3?
作者:
proud (hc)
2015-05-29 21:12:00改過了, 但執行時還是出現Segmentation fault (core dumped
getgrnam 可能回傳NULL沒檢查就拿去while 可能爆炸
er...都會用linux sdk了,請盡量跟gdb混熟一點喔(汗不然你以後的夢靨保證無窮無盡
作者:
WYchuang (愛賴床的黃金獵犬)
2015-05-30 01:27:00你的data -> gr_mem 有多長? while怎麼知道要停在哪照你的寫法while會跑到超過gr_mem 長度 然後就seg fault
作者:
tinlans ( )
2015-05-30 05:03:00...............為什麼不用 gdb?
gr_mem沒問題 請先去看struct group的定義
第七行data = getgrnam("gp"); 不用加引號吧?你想傳入的應該是argv[2]而不是"gp"這個詞?
gdb your_process core_file