搜尋

首頁  >  問答  >  主體

linux - 執行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;
}

運行的結果如下圖

#
伊谢尔伦伊谢尔伦2762 天前1274

全部回覆(2)我來回復

  • 滿天的星座

    滿天的星座2017-06-07 09:26:30

    strlen的作用是遍歷一個char*,如果找到0x00(所謂結束符'

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-07 09:26:30

    C語言吧

    int strlen(char *p){
        int c=0;
        while(*(p++)) c++;  // p[c] != 0
        return c; 
    }

    rb 讀取出來的結果可以認為是uint8

    的數組,即

    0~255的數組。 對於JPEG,你應該知道APP0的第一個字段是本字段長度0x00,0x10

    回覆
    0
  • 取消回覆