在Char中读取JPEG

时间:2015-01-15 20:51:52

标签: c jpeg

所以我想读取JPEG以通过套接字将其发送到浏览器。 但是我一直在阅读JPEG中遇到问题。 我的代码:

FILE* fp = fopen(filename, "rb"); 
if( fp == NULL)
    { 
        fp = fopen(FILE_404, "r");
    } else
    {

        struct stat fst;
        stat(filename, &fst);
        unsigned char *blob;


        blob = (unsigned char *)malloc(fst.st_size);

        fread(blob, 1, fst.st_size, fp);

        header->content = (unsigned char*)malloc(fst.st_size);

        strcat(header->content, blob);
        header->content[fst.st_size+1] = "\0";
        header->content_len = fst.st_size;

    }

但是当打印blob时得到的全部是:\377\330\377\340虽然文件是:67165字节大。 我该怎么办?

1 个答案:

答案 0 :(得分:1)

  1. strcat(header->content, blob);对二进制数据没有意义。 strcat()适用于字符串。 @ouah

  2. 以下是未定义的行为,因为content[fst.st_size+1]超出范围。

    reader->content = (unsigned char*)malloc(fst.st_size);
    ...
    header->content[fst.st_size+1] = ...
    
  3. 代码似乎想要向数组附加空字符'\0'。添加指向字符串"0"的指针是不一样的。 IAC,附加空字符不是解决方案。

    header->content = (unsigned char*)malloc(fst.st_size);
    .... 
    // bad code
    header->content[fst.st_size+1] = "\0";
    
  4. 在使用fread(blob, 1, fst.st_size, fp);中的数据之前,请检查blob的返回值。 @Lee Daniel Crocker还应该检查stat()的返回值。

  5. 轻微:无需投射malloc()返回。

    // blob = (unsigned char *)malloc(fst.st_size);
    blob = malloc(fst.st_size);
    
  6. 通过blob

    成功阅读后,打印fread()的内容
    size_t i;
    for (i = 0; i<fst.st_size; i++) {
      printf(" %02X",  blob(i));
    }