Как вы печатаете ограниченное количество символов? - PullRequest
11 голосов
/ 15 апреля 2010

Извините, что опубликовал пост о чем-то таком простом, но я не вижу, что я делаю здесь неправильно.

char data[1024];
DWORD numRead;

ReadFile(handle, data, 1024, &numRead, NULL);

if (numRead > 0)
    printf(data, "%.5s");

Мое намерение с вышеизложенным - прочитать данные из файла, а затем распечатать только 5 символов. Однако он выводит все 1024 символа, что противоречит тому, что я читаю здесь . Цель, конечно же, сделать что-то вроде:

printf(data, "%.*s", numRead);

Что я здесь не так делаю?

Ответы [ 4 ]

27 голосов
/ 15 апреля 2010

У вас есть параметры в неправильном порядке. Должно быть написано:

printf("%.5s", data);

printf("%.*s", numRead, data);

Первый параметр printf - это спецификатор формата, за которым следуют все аргументы (которые зависят от вашего спецификатора).

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

Я думаю, вы меняете порядок аргументов на printf:

printf("%.5s", data); // formatting string is the first parameter
1 голос
/ 15 апреля 2010

Вы неправильно вызываете printf ().

int printf ( const char * format, ... );

Что значит ...

printf("%.5s", data);
0 голосов
/ 15 апреля 2010

Вы используете неправильный синтаксис для оператора printf, а .number предназначен только для числовых переменных.

Так и должно быть

int i;
for(i=0;i<5;i++)
   printf("%c", data[i]);
...