我在Ubuntu中使用gcc-7在c中創建了一個程序。我有可執行文件sambleb.out文件。我想用c編程複製該文件。這是程序。無法通過c程序複製二進制文件
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen("sampleb.out","rb");
FILE *fpcp;
fpcp = fopen("cp-of-sampleb.out","wb");
char forcp;
while (1)
{
forcp = fgetc(fp);
if(forcp == EOF)
break;
fputc(forcp, fpcp);
}
fclose(fp);
fclose(fpcp);
}
當我編譯程序並執行它時,我得到了段錯誤。
$ a.out && chmod a+x cp-of-sampleb.out
$ ./cp-of-sampleb.out
Segmentation fault
這裏是CP-的-sample.out
$ cat cp-of-sampleb.out
ELF>[email protected]@@@8 @@@@@@��[email protected]@@@,, `` (
((`(`��[email protected]@DDP�[email protected]@44Q�tdR�td``��/lib64/ld-
linux-x86-64.so.2GNU GNUX�T3�O���t�R�b�Ss�F
$
libc.so.6printf__libc_start_main__gmon_start__GLIBC_2.2.5ui
3�`` `H�H�%
H��t�CH��
和sampleb.out的內容
$ cat sampleb.out
ELF>[email protected]@@@8 @@@@@@��[email protected]@@@,, `` (
((`(`��[email protected]@DDP�[email protected]@44Q�tdR�td``��/lib64/ld-
linux-x86-64.so.2GNU GNUX�T3�O���t�R�b�Ss�F
$
libc.so.6printf__libc_start_main__gmon_start__GLIBC_2.2.5ui
3�`` `H�H�%
H��t�CH���5
�%
@�%
h������%
h������%�
]�8`��D]�fD�8`UH��8`H��H��H��H��?
H�H��t�H��tU�8`H=8`H��t�H��t
]�8`��]�fD�=a
uUH���~����O
]�D��@f.�UH��]��UH�忸@�������]�f.�DAWAVA��AUATL�% UH�-
SI��I��L)�H�H���g���H��t
1��L��L��D��A��H��H9�u�H�[]A\A]A^A_Ðf.���H�H��how are you I am
fine this singale line is printed by multiline
printf;4�����0���P����0��������zRx
�����*zRx
�$h���0FJ
U
�?;*3$"DW���A�C
Dd`���eB�B�E �B(�H0�H8�[email protected](B BB�����@�@
�@` `���o�@@�@ �@
?
`0�@� ���o`@���o���[email protected](`@@GCC: (Ubuntu 7.1.0-
5ubuntu2~16.04) [email protected]@[email protected]�@�@@[email protected]`@ �@
�@
�@
@[email protected]�@�@@[email protected]` `(`�``(`8`��
`@�@!
�@78`F `[email protected]`������(@���(`(���`�(`(8`8�08)8h� P�
(我沒有貼最後一行的原因,他們的內容到很多)。因此,我可以看到我的程序只處理了前7行。如果你告訴我什麼是錯誤的,這將會非常有幫助?我仍然是菜鳥。
'焦炭forcp;'==>'INT forcp;'。函數'fgetc'返回'int',所以在二進制數據中你可以區分'-1'EOF的0xFF數據。 –
'chmode'可能是'chmod'的拼寫錯誤。您不測試文件是否已成功打開;這總是*壞* - **非常糟糕*** *** –
['fgetc'](http://en.cppreference.com/w/c/io/fgetc)函數返回一個int '。這對於'EOF'檢查很重要。 –