#c #buffer
#c #буфер
Вопрос:
Я учусь использовать функцию записи и пытаюсь напечатать только часть буферного массива символов. Итак, это выглядит так:
char *tempChar;
char *buf;
buf=amp;tempChar;
read(0, buf, 10);
write(1, [???], 1);
Я думал о том, чтобы поместить buf[3] туда, где находится [???], но это не сработало.
Я также думал об использовании tempChar[3], но это тоже не сработало.
Есть идеи? Большое спасибо.
Комментарии:
1. На практике вы должны знать, что
write
системный вызов является дорогостоящим, и вам обычно следует избегать его вызова для одного символа (или даже небольшого количества байтов). По соображениям производительности важноwrite
обрабатывать довольно большие куски данных (обычно не менее нескольких килобайт). Итак, вам нужно буферизировать ваши данные. Тогда часто лучше использовать<stdio.h>
такие функции и, какfopen
,fprintf
,fputs
,fwrite
,,, потому что они выполняют буферизацию за вас. Но не забудьте вызватьfflush
orfclose
!
Ответ №1:
Вы бы использовали buf 3
. Это арифметика указателей. Он принимает buf и дает вам новый указатель на 3 символа ниже. buf[3]
эквивалентно *(buf 3)
. Обратите внимание на нежелательное разыменование.
В качестве еще одного примечания:
buf=amp;tempChar;
вероятно, это неправильно.
Это присваивает адрес переменной tempChar buf, что, вероятно, не то, что вы хотите.
Комментарии:
1. спасибо, это решило проблему. Да, вы правы, я имел в виду «char tempChar», а не «char * tempChar»
2. Тогда у вас еще одна ошибка! ‘char tempChar;’ превращает tempChar в один символ. Очевидно, что вы не можете прочитать в него 10 байт.