gpt4 book ai didi

C程序前置,什么时候应该追加

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:25 24 4
gpt4 key购买 nike

尝试用我以前从未使用过的 C 编写一个程序,将十六进制转换为二进制字符串并将其写入文件,唯一的问题是它在我需要时添加到输出文件中 append 。fprintf() 和 fputs() 都会发生这种情况。

这是 append 代码:

while(fgets(line,1024,inputFile)){
lineLen = strlen(line);
binary = hexToBin(line, lineLen);
printf("Binary: %s\n", binary);

// output file does not exist
FILE *writeFile = fopen(argv[2], "a");
if (writeFile == NULL) {
fprintf(stderr, "write file not found: %s\n", strerror(errno));
exit(1);
}
printf("appending binary to file\n");
fprintf(writeFile,"%s\n",binary);
printf("appended\n");
}

这是 hexToBin 函数:

char* hexToBin(char hex[], size_t len){
// convert hexadecimal to binary
char *binString = (char*)malloc(sizeof(char)*4*len);
for (int i=0;i<len;i++){
char *binNum = hexToBinHelp(hex[i]);
strcat(binString,binNum);
free(binNum);
}
return binString;
}

hexToBinHelp 将十六进制字符作为其二进制表示形式的 char* 返回(例如 binNum=[0][0][0][0])。它真的很长,所以我不想把它放在这里,但如果有帮助的话可以放在这里。

当输入文件是:

000a
a000

输出文件是:

1010000000000000
0000000000001010

谢谢

最佳答案

您的循环每次迭代都会调用 fopen(),并且永远不会关闭或刷新此文件流。写入被缓冲,等待缓冲区被填充或被刷新或文件被关闭;所以下次你调用 fopen() 时,你会得到与第一次相同的指针。

你很幸运它没有崩溃。 :) 不要重复调用 fopen()。在循环外调用一次,在循环内使用或移动指针,然后在外部调用 fclose()。

关于C程序前置,什么时候应该追加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54612115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com