gpt4 book ai didi

c - 读取图像文件内容到缓冲区

转载 作者:行者123 更新时间:2023-11-30 16:48:20 25 4
gpt4 key购买 nike

char* full_string;
int size;
FILE* f = fopen(filename,"r");

fseek(f,0,SEEK_END);
size = ftell(f);
fseek(f,0,SEEK_SET);
full_string = malloc(size+1);
fread(full_string,1,size,f);
fclose(f);

full_string[size] = '\0';

我试图使用上面的代码将文件的内容读入名为“full_string”的缓冲区,但是当我在 gdb 中单步执行时,我发现以下内容存储在“full_string”中:

full_string = 0xa46df0 "\377\330\377", <incomplete sequence \340>

我是C方面的新手,所以我不知道如何解释这个问题。值得一提的是,我正在读取的文件是图像文件。大多数这些图像的大小为 50,000 字节或更大。任何帮助将不胜感激!

最佳答案

char * 并不自动表示字符串。 C 中的字符串是字节序列,存储在 char * 中(或衰减为 char *char []当它传递到某个地方时,但让我们考虑这些对于这个答案来说是相同的)。这一系列字节必须以 '\0'(空字节)结束,并且内部任何位置都不包含它。

如果您在十六进制编辑器中打开该特定文件,您可能会看到类似 FF D8 FF E0 00 的内容,假设我 (a) 正确完成了八进制到十六进制转换并且 (b)没有犯任何其他愚蠢的错误。这在文件中是有效的,但如果您尝试将其解释为字符串(例如使用 strlen 或 GDB 的操作),您将不会获得约 50000 个字符的预期值,因为第一个空字节之前的字符少于 50000 个。这也意味着用 '\0' 终止“字符串”是毫无意义的;我的意思是,它不是一个字符串。它是一个字节序列。

如果长度很重要,您需要将其存储在结构体或另一个变量中,具体取决于您的要求。

关于c - 读取图像文件内容到缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43011383/

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