我目前正在試圖做一個程序,操縱從命令行參數分析的二進制文件。該程序會在輸出文件的開頭插入一個無符號整型數據後,將二進制文件(input.bin)複製到另一個文件(output.bin)中。命令都按這樣的:C二進制I/O程序問題
$./padder input.bin output.bin 50
但是我的輸出給了我:
Source successfully written to destination after padding by 53
我遇到的第一個問題是,53不是int我通過在墊(插入)。我遇到的第二個問題是,在對我的input.bin文件和我的output.bin文件進行十六進制轉儲之後,它們是相似的,但不完全是我想要的。
進制打印input.bin:
0000000 3231 3433 3635 3837 3039 000a
000000b
進制打印output.bin:
0000000 3231 3433 3635 3837 3039 000a 0000 0000
0000010 0000 0000 0000 0000 0000 0000 0000 0000
*
000002c
任何人都可以給我一些見解?我是新來的文件I/O和相當新的,但在C.沒有老到任何幫助表示讚賞
源代碼:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
int main(int argc, char *argv[]){
if(argc != 4){
printf("ERROR: INCORRECT AMOUNT OF ARGUMENTS!!!\n");
} else {
FILE *input = fopen(argv[1], "rb");
if(input == NULL){
perror("INPUT FILE OPEN");
exit(EXIT_FAILURE);
}
FILE *dest = fopen(argv[2], "wb");
if(dest == NULL){
perror("DEST FILE OPEN");
exit(EXIT_FAILURE);
}
unsigned int *pad_val = (unsigned int *)argv[3];
unsigned char *pad = (unsigned char *) pad_val;
size_t n, m;
unsigned char buff[4096];
do{
n = fread(buff, 1, sizeof buff, input);
if(n){
m = fwrite(buff, 4, n, dest);
rewind(dest);
m = fwrite(&pad, 1, n, dest);
} else {
m = 0;
}
} while((n > 0) && (n == m));
if(m){
perror("copy");
}
printf("Source successfully written to destination after padding by %u\n", *pad);
fclose(input);
fclose(dest);
}
return 0;
}
這裏是一個提示:在ASCII中,'5''的數值爲53。 – EOF