gpt4 book ai didi

c - 为什么文本文件中会出现多余的字符?

转载 作者:行者123 更新时间:2023-11-30 15:43:37 25 4
gpt4 key购买 nike

我有一个文件,如下所示(十六进制)。

1F 00 48 3A 18 00 00 00 53 00 70 00 6F 00 75 00 
73 00 65 00 5F 00 61 00 7A 00 61 00 6D 00 00 00

我正在尝试从文件中读取二进制数据并将其输出为文本。我当前的代码如下:

#include<stdlib.h>
#include<stdio.h>
#include<iostream.h>

int main()
{
FILE *pFile, *tempFile;
pFile = fopen("C:\\wab files\\Admin.wab", "rb");
if(pFile == NULL)
{
fputs("file error", stderr);
exit(1);
}
tempFile = fopen("C:\\myfile.text","wb");
if(tempFile == NULL)
{
fputs("file not open", stderr);
exit(2);
}
int Contact_Id, Id_Size, Data_Info=0;
fread(&Contact_Id, 1, 4, pFile);
fread(&Id_Size, 1, 4, pFile);
Data_Info = Id_Size;
char* Main_buffer = (char*)malloc(Data_Info*sizeof(Data_Info));
fread(Main_buffer, 1, Id_Size, pFile);
const wchar_t* src = (unsigned short *) Main_buffer;
wcstombs ((char*) Main_buffer, src, Data_Info );
fwrite(Main_buffer, 1, Data_Info, tempFile);
free(Main_buffer);
return 0;
}

输出文本文件包含以下内容:

Spouse_azam _ a z a m

为什么文本文件中显示_ a z a m?我只想写 Spouse_azam

最佳答案

首先这是错误的:

char* Main_buffer = (char*)malloc(Data_Info*sizeof(Data_Info));

应该是

char* Main_buffer = (char*)malloc(Data_Info*sizeof(char));

其次,您对源和目标使用相同的缓冲区 (Main_buffer)。结果是缓冲区的第一部分被转换后的字符串覆盖,但缓冲区的其余部分保持不变。缓冲区中最初有 24 个字节(如果分配正确),前 11 个字节将被覆盖,但其他 13 个字节仍留在那里。

有两个选项:为多字节字符串使用第二个缓冲区,或者使用 wcstombs 的返回值来了解结果字符串有多少字节:

int bytes = wcstombs ((char*) Main_buffer,  src, Data_Info );
fwrite(Main_buffer, 1, bytes, tempFile);

关于c - 为什么文本文件中会出现多余的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19833803/

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