2013-04-08 67 views
0

我的代碼的第一行出現奇怪的分段錯誤。fopen上的分割錯誤

我所要做的就是調用

FILE *src = fopen(argv[1], 'r'); 

而且我得到了賽格故障與在gdb消息...

計劃接收信號SIGSEGV,分割過錯。

0x00007ffff779956d in _IO_file_fopen() from /lib/x86_64-linux-gnu/libc.so.6 

我將文件的名稱直接複製到運行時執行中。思考?

+2

你_do_參數傳遞給你的程序? – 2013-04-08 13:01:31

+1

你的編譯器應該給出一個警告,說明你的參數是錯誤的。 – teppic 2013-04-08 13:08:20

回答

0

可能傳遞的字符串不是空終止,或者你在argv的

14

acessing無效指數的第二個參數fopen()應該是一個字符串,而不是char

FILE *src = fopen(argv[1], "r"); 

注意雙引號。

打開編譯器警告並留意它們總是一個好主意。我的編譯器拿起上不正確的說法:中

test.c:4:1: warning: passing argument 2 of 'fopen' makes pointer from integer without a cast [enabled by default] 
In file included from test.c:1:0: 
/usr/include/stdio.h:250:7: note: expected 'const char *' but argument is of type 'int' 
+0

就是這樣。謝謝。 – SwiftCore 2013-04-08 13:02:57

+1

我想知道爲什麼不引發編譯錯誤。 – 2013-04-08 13:04:48

+1

@Avidanborisov:如果我沒有弄錯,它被隱式轉換爲指針。 – someguy 2013-04-08 13:09:12

0

代替

FILE *src = fopen(argv[1], 'r'); 

你需要寫

FILE *src = fopen(argv[1], "r");