執行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
(所謂結束符'
C語言吧
而
的數組,即rb
讀取出來的結果可以認為是
uint80~255
的數組。
對於JPEG,你應該知道
APP0的第一個字段是本字段長度
0x00,0x10