看板 C_and_CPP 關於我們 聯絡資訊
出現問題的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 ); 但還是一樣 想請問是哪裡出了錯誤? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.240.6.123 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1432904811.A.C15.html
dracb: argc==3?05/29 21:08
proud: 改過了, 但執行時還是出現Segmentation fault (core dumped05/29 21:12
※ 編輯: proud (49.219.132.106), 05/29/2015 21:14:05
x000032001: getgrnam 可能回傳NULL05/29 21:17
x000032001: 沒檢查就拿去while 可能爆炸05/29 21:18
Thanks ※ 編輯: proud (49.219.132.106), 05/29/2015 21:26:49
Killercat: er...都會用linux sdk了,請盡量跟gdb混熟一點喔(汗05/30 00:04
Killercat: 不然你以後的夢靨保證無窮無盡05/30 00:04
好的,謝謝建議
WYchuang: 你的data -> gr_mem 有多長? while怎麼知道要停在哪05/30 01:27
WYchuang: 照你的寫法while會跑到超過gr_mem 長度 然後就seg fault05/30 01:28
只是錯誤點不像是長度啊
tinlans: ...............為什麼不用 gdb?05/30 05:03
x000032001: gr_mem沒問題 請先去看struct group的定義05/30 09:12
penknifelee: 第七行data = getgrnam("gp"); 不用加引號吧?05/30 10:52
penknifelee: 你想傳入的應該是argv[2]而不是"gp"這個詞?05/30 10:53
對,只是如果直接放入的話會接到後面的迴圈,後來就改下面的code,裡面直接放argv[]
shadow0326: gdb your_process core_file05/30 12:08
proud: 感謝大家幫忙! 我最後就不strcpy 字串,直接在裡面放入argv [] 05/30 13:33 ※ 編輯: proud (49.217.16.219), 05/30/2015 13:37:59
soso7885: 抓-g這種option可以用getopt 05/30 22:59