Предельный выход в C - PullRequest
2 голосов
/ 29 мая 2010

В C я хотел бы ограничить строку первыми 8 символами. Например, у меня есть:

char out = printf("%c", str);

Как сделать так, чтобы он возвращал только первые 8 символов?

Ответы [ 2 ]

9 голосов
/ 29 мая 2010

Вы можете ограничить длину, установив точность в спецификаторе формата:

printf("%.8s", str);

При этом будет напечатано до восьми символов из строки с нулевым символом в конце, на которую указывает str. Если длина str меньше восьми символов, будет напечатана вся строка.

Обратите внимание, что спецификатор формата для строки с нулевым символом в конце равен %s, а не %c (%c предназначен для печати одного char) и что printf возвращает int (общее количество напечатанных символов), а не char.

0 голосов
/ 30 мая 2010

Нет

Это неверно. табличная печать "% 8s" дополняется до 8 пробелов, как в приведенном примере. Это не усекает. ISOC99. Если это только Windows, хорошо, MS игнорирует мир во многих вещах. Если длина строки длиннее табуляции, печатается полная строка. См:

int main()
{
  char tmp[]="123456789";
  printf("1  %1s\n", tmp);
  printf("2  %2s\n", tmp);
  printf("4  %4s\n", tmp);
  printf("8  %8s\n", tmp);
  printf("16 %16s\n", tmp);
  printf("32 %32s\n", tmp);
  return 0;
}

вывод из gcc 3.4.2 на Solaris 5.9:

> ./a.out                   
1  123456789                       
2  123456789                       
4  123456789                       
8  123456789                       
16        123456789                
32                        123456789

sprintf () дублирует и усекает строку, после чего ее можно отправить в printf. Или, если вас не волнует исходная строка:

char * trunc(char *src, int len)
{
    src[len]=0x0;
    return src;
}

Ссылки: МЕЖДУНАРОДНЫЙ СТАНДАРТ © ИСО / МЭК ИСО / МЭК 9899: TC2, WG14 / N1124 Проект комитета - 6 мая 2005 г.

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