В функции printf C при использовании этого под-спецификатора ширины форматера гигантской строки;близко к пределу стандарта положительный знак int;который указан ниже остальных форматов строк, игнорируется.
Пример формата строки:
printf("**%2147483614p %1073739618p This text and %d formatters are ignored!!! why**", &i, &j, 10);
вывод: **2147483614 empty spaces
0xbf ****** 1073739618 empty spaces
Проблема:
Текст "** Этот текст и 10 форматеров игнорируются !!! почему ****" и целое число 10 не отображается на экране.Он печатает полный первый% p с заполнением и заполнением, созданным спецификатором ширины для второго% p, но без указателя и оставшейся части строки для печати.
Примечание: второй указатель может быть сделандля печати с левой настройкой формата, например
printf ("% - 2147483614p% -1073739618p Этот текст и% d средства форматирования игнорируются !!! Why **", & i, & j, 10); **
но строки по-прежнему отсутствуют.
Код
#include <stdio.h>
int main(int argc, char const *argv[]){
printf(argv[1]);
return 0;
}
x86_64-linux-gnu gcc версия 7.3.0
gcc printf.c -o printf
. / Printf "% - 2147483614p% -1073739618p Этот текст и% d средства форматирования игнорируются !!! почему "
PS Мне известно, что это утечка памяти
Обнаружено% 29p (29 - максимум, 30 не будет печататься) для второго указателя печатает остальную часть строки.но если в остальной части строки есть другой формат, он останавливается на этом.