LINUX.ORG.RU

а нахуа? если на экран, то его не видно

Lee_Noox ★★★
()
char *tmp = (char*) calloc(10240);
memcpy(tmp, pts, length);
tmp[length] = 0;
printf("s1='%s'\n", tmp);

Только не пойму, зачем вам это надо? Что, строка на 1 символ длиннее буфера для нее?

Eddy_Em ☆☆☆☆☆
()

ИМХО, только в два прохода.
Сначала собрать форматную строку через snprintf, и уже потом выводить через printf.

eXire ★★
()
Ответ на: комментарий от Eddy_Em

> Только не пойму, зачем вам это надо? Что, строка на 1 символ длиннее буфера для нее?

Ну если это вот исторически сложилось что хранится пара (char *text, int length). и размер text равен length, а не length+1.

vahvarh ★★★
() автор топика
Ответ на: комментарий от vahvarh

А не вариант чуть-чуть переправить то, что у вас исторически сложилось? Если не вариант - пробуйте что я вам предложил, или через snprintf, как предложил eXire.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от eXire

тогда уж

char *tmp = (char*) malloc(length+1); 
if (tmp == NULL)
       return -1;//exit(1);
memcpy(tmp, pts, length); 
tmp[length] = 0; 
printf("s1='%s'\n", tmp); 
free(tmp);

anonymous
()
Ответ на: комментарий от Eddy_Em

ну я раньше делал как ты написал, а сейчас поправил (надеюсь везде, кода много), так что вопрос теперь уже скорее академический. Ибо я где-то видел, как это сделать средствами самих параметров к printf.

vahvarh ★★★
() автор топика
Ответ на: комментарий от Reset

Длина может задаваться также параметром, читайте man 3 printf.

например:

printf("%*d", width, num);
printf("%2$*1$d", width, num);

vahvarh ★★★
() автор топика
Ответ на: комментарий от vahvarh

Сделайте в заголовочном файле

#define printf(...) myprintf(VA_ARGS)
Ну, а myprintf уж определяйте - тогда точно нигде не пропустите.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Только не пойму, зачем вам это надо? Что, строка на 1 символ длиннее буфера для нее?

мне тоже на практике это еще никогда не нужно было но видел в исходниках вот например кусок кода из файла pcredemo.c библиотеки PCRE

/* The output vector wasn't big enough */

if (rc == 0)
  {
  rc = OVECCOUNT/3;
  printf("ovector only has room for %d captured substrings\n", rc - 1);
  }

/* Show substrings stored in the output vector by number. Obviously, in a real
application you might want to do things other than print them. */

for (i = 0; i < rc; i++)
  {
  char *substring_start = subject + ovector[2*i];
  int substring_length = ovector[2*i+1] - ovector[2*i];
  printf("%2d: %.*s\n", i, substring_length, substring_start);
  }

хотя конечно можно банально было перед выводом скопировать найденный item и вывести но так короче и меньше писать хотя это дело вкуса кому то это покажется отвратительным

osox
()
Ответ на: комментарий от Led

fwrite() ладно, но как fputs() поможет в случае, если строка не заканчивается NUL?

sjinks ★★★
()

Возьмите printf из sqlite и добавьте свой тип.

rymis ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.