执行fread函数出现问题

执行fread函数" title="fread函数">fread函数成功后,返回的值是等于data_len。但是执行strlen后,字符串buff的长度不对。但是我用fwrite将图片写到另一个.jpg是OK的

int main()

{

FILE *fp,*out;

int c,len;

out=fopen("out.jpg","wb");

if((fp=fopen("/home/jens/Desktop/picture.jpg","rb"))<0){

printf("error open\n");

}

if(fp == NULL)

printf("Open file Error!");

fseek(fp,0,SEEK_END);

int data_len=ftell(fp);

printf("datalen %d",data_len);

rewind(fp);

char* buff=(char *)malloc((data_len)*sizeof(char)+1);

size_t a=fread(buff,sizeof(char),data_len,fp);

printf( "\n a %d",a); //a的值是图片的大小

len=strlen(buff);

printf("\n len %d",len);//在这里buff的大小却只是4。

char* HTTP_INFO=(char *)malloc((data_len)*sizeof(char)+1024);

char *buf="abcdefg";

printf("\n %d",strlen(buf));

len=sprintf(HTTP_INFO,"%s",buf);//如果把这个换成buff,结果也还是4。

printf("\nlen %d",len);

fclose(fp);

fclose(out);

return 0;

}

运行的结果如下图
图片描述

回答:

strlen的作用是遍历一个char*,如果找到0x00(所谓结束符'\0')就认为字符串结束,并返回遍历了多少个字符。你读取一个jpg文件,有很大概率在第5个字节上出现0x00,那么strlen当然只能读到4个字节。不信你可以用xxd out.jpg看一下二进制字节。

回答:

C语言吧\0看作字符串的结尾。。。
简单来说,strlen的实现大概是:

int strlen(char *p){

int c=0;

while(*(p++)) c++; // p[c] != 0

return c;

}

rb 读取出来的结果可以认为是uint8的数组,即0~255的数组。

对于JPEG,你应该知道APP0的第一个字段是本字段长度0x00,0x10

以上是 执行fread函数出现问题 的全部内容, 来源链接: utcz.com/p/192150.html

回到顶部