Вот собственно исходник Хочу видеть его внутренности в виде хексов. Ничегоне получается #include <stdio.h> int main() { FILE *rom; char c[20]; rom = fopen("c:\\1.txt","r"); if (rom) printf("\n123"); // для проверки fread(c,1,1,rom);/////////////<= неработает printf("%x",с); ////////////// Выводит почему то два байта ff23 //////////////////////при разных файлах, которые открываю return 1; }
Вот как надо printf("%x",*c); Только читается один байт, но правильный fread(c,4,2,rom); А вот эти аргумента 4,2 не изменяют ничего. ВСё равно читается 1 байт. Скажи в чём проблема. Там текст 20 символов. А у меня только 1 выдаётся.
Вот проверил только что. Если так делать printf("%x",c[1]); или с[2], то видны символы. А весь текст в хексе вывести , в цикле чтоль.
И вот ещё что. Почему когда переданы такие параметры fread(c,1,1,rom); у меня получается видеть даже 5-тый байт, хотя в буфер я его не помещал printf("%x",c[4]);
сообразительный *c означает что надо взять один элемент массива, на который указывает с. массив char, сталобыть ждать, что считается int не стоит, есле конешно не привести типы а откуда компилятору знать что ты там помещал в буфер, а что - нет? это твои проблемы - следить за тем, чтоб не вылазить за пределы считанного. p.s. испоьзуй тег code.
Уменя просто плохо с указателями и я забываю постоянно что имя массива -это адрес первой переменной. Практики мало. Вот чижу и и кодю -повышаю уровень. Спасибо что помогаете. А вот ещё вопрос #include <stdio.h> #include <conio.h> struct header { char stack[4]; char pc[4]; }; int main() { header h; clrscr(); FILE *rom; rom = fopen("c:\\1.txtr"); fread(&h,1,sizeof(h),rom); printf(h.stack); return 1; } Читаю из файла в созданую структуру. Когда пишу printf(h.pc); -выдаёт последние 4 байта а когда printf(h.stack); все 8 включая 4 последних, а почему не 4 первых, в структуре же явно объявлено. Структура это же не объединение.
ajak, как тебе уже выше сказал уважаемый Freeman: а по существу: почитай что такое Си-строки (хотя бы здесь), и все станет понятно. у тебя нигде нет явного маркирования конца строки (Си-строки заканчиваются нулем), или же хранения в отд. переменной длины строки, а потому когда ты пытаешься вывести на экран первую строку из структуры header, выводится и та, что следует за нею, до тех пор, пока не встретится терминирующий нуль. скорее всего при записи структур в файл ты не завершаешь строки этой структуры нулём, и, следовательно, при считывании этих структур из файла ты получаешь ненужные сложности по поводу разруливания конца строки. и еще: почему ты открыв файл, никогда его не закрываешь? юзай fclose(FILE *);
ajak )) имеется ввиду при написании на этом форуме сообщения помещать Си код в теги [ code ][ code ] (без пробелов ессно) для его удобочитаемости.
ААААААААААААААааааааааааааа. Понял. Ещё такой вопрос. Когда кодил в паскале, там проше было. Не было этого нулевого символа. А теперь си. И у меня есть большая структура, записи которой неравномерны по размерам. Код (Text): struct header { char stack[4]; char pc[4]; char pcс[41]; char _pc[34]; .... .. }; Типа этого. И что мне теперь все строки, после того как, я считаю файл в структуру обрабатывать? . Файл- не текст. Просто бинарик. Но отдельные компоненты имеют разные размер. Поэтому и исп. тип char
2)Блин, чёт не могу ничего понять. Приходить писать сюда. Почему при исп. следующей инструкции Код (Text): header h; h.stack="1234"; Компиль ругается и говорит про левосторонее значение. Равме что я не могу переопределить переменную?
потомучто h.stack - это массив из 4 элементов char, а "1234" по сути указатель на строку "1234" с завершающим нуль-символом. будет правельно, если написать чтото типа Код (Text): h.stack[0]="1234"[0] //or memcpy((void*)h.stack,(const void*)"1234",4);
А что по поводу записей? Кто подскажет? Код (Text): struct header { char stack[4]; char pc[4]; }; Как добиться того, чтобы после заполнения структуры из файла в которой нету конца строки при выводе переменной stack показывались 4 а не 8 байт, или все последующие?
Вот главный вопрос. Что мне делать с типом char. В нём у меня содержаться 16-ные числа. Но чтобы их вывести мне нужно прогонять циклом функцию printf, т.к. при передачи в это функцию просто строки- выводится аски коды, а они мне не нужны, т.к. некоторые символы не видны. К какому типу лучше преобразовать тип char. Посоветуйте.МНе нужно фидеть хексы из char а не аски.
Вот что сейчас для меня главное Как добиться того, чтобы после заполнения структуры из файла в которой нету конца строки при выводе переменной stack показывались 4 а не 8 байт, или все последующие?
ajak я тебя смутно понял. а зачем хранить 16ричные числа в char ? храни их в unsigned long к примеру. и выводи их как printf("%x", myLongValue); почему так нельзя? касаемо структур: после их считывания из файла принудительно дополняй строки в этих структурах завершающим нулем. и все будет ок.