Почему этот код читает все '' для всего после 4-го символа? - PullRequest
0 голосов
/ 07 апреля 2010
#define fileSize 100000 
int main(int argc, char *argv[]){       
        char *name=argv[1];
        char ret[fileSize];
        FILE *fl = fopen(name, "rb");
        fseek(fl, 0, SEEK_END);
        long len = fileSize;
        fseek(fl, 0, SEEK_SET);
        //fread(ret, 1, len, fl);
        int i;
        *(ret+fileSize) = '\0';
        for (i=0; i<fileSize; i++){
            *(ret+i)=fgetc(fl);
            printf("byte : %s \n", ret);
        }
        fclose(fl);
}

В приведенном выше коде, когда я передаю имя файла JPEG, он читает что-либо после 4-го символа как '' ... есть идеи?Спасибо!

Ответы [ 2 ]

4 голосов
/ 07 апреля 2010

Это потому, что% s пытается распечатать строку. Он обнаруживает конец строки, находя нулевой символ (значение байта 0). Таким образом, это, вероятно, вовсе не распечатка пробела, а скорее распечатка ничего или пустой строки, потому что встречается байт со значением 0.

1 голос
/ 07 апреля 2010

Я бы согласился с тем, что вы читаете нулевой байт, и предложил бы использовать% d в качестве символа формата, хотя я лично предпочитаю hex и буду использовать

  printf("byte : 0x%02X \n", ret);

Но у меня есть к вам вопрос. В такой маленькой программе, зачем спрашивать нас? Я не саркастичен, я искренне удивляюсь, почему вы не отлаживаете это самостоятельно. Просто создайте его в Eclipse и переходите по одной строке за раз, и Eclipse покажет вам значения всех локальных переменных, и вы увидите, что не так. Опять же - без обид.

Кстати, вы можете найти фактический формат файла JPEG здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...