Пожалуйста, почему этот код печатается с дополнительным n, когда я его запускаю?

Я пытаюсь получить pid, используя этот код. Но когда я запустил скомпилированный код. Я получаю сообщение об ошибке «предупреждение: формат указывает тип« unsigned long », но аргумент имеет тип« pid_t »(также известный как« int »)[-Wformat]».

Когда я изменил спецификатор формата на просто «%lu», он печатается без дополнительного символа.

#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { pid_t pid = getpid(); printf(«pid: %lun», pid); }

Я ожидал pid «60316». Я получаю pid «60316n».

И что вы ожидаете от n в %lun? Это должно было быть n?   —  person jennylearner    schedule 04.10.2019

n не является частью спецификатора формата %lu; это часть обычной строки. Распечатывается как есть.   —  person jennylearner    schedule 04.10.2019

В дополнение к комментарию UnholySheep, %lu специально используется для печати unsigned long, последующее n просто обрабатывается как строковый литерал, точно так же, как префикс pid :.   —  person jennylearner    schedule 04.10.2019

Хорошо. Я понял теперь. Спасибо всем за то, что сделали это яснее.   —  person jennylearner    schedule 04.10.2019

Источник: ledsshop.ru

Стиль жизни - Здоровье!