warning: format '% x ожидает аргумент типа unsigned int

Когда я пытаюсь скомпилировать это, я получаю следующую ошибку, не уверен, почему...

warning: format '% x ожидает аргумент типа unsigned int, но аргумент 2 имеет тип' char * [-Wformat =]

printf("Name buffer address:    %x\n", buffer);

Код:

#include <string.h>
#include <stdio.h>

main(){
        char name[200];
        printf("What is your name?\n");
        scanf("%s", name);
        bo(name, "uname -a");
}

int bo(char *name, char *cmd){
        char c[40];
        char buffer[40];
        printf("Name buffer address:    %x\n", buffer);
        printf("Command buffer address: %x\n", c);
        strcpy(c, cmd);
        strcpy(buffer, name);
        printf("Goodbye, %s!\n", buffer);
        printf("Executing command: %s\n", c);
        fflush(stdout);
        system(c);
}
0
источник поделиться
2 ответа

Вы получаете предупреждения из-за следующих утверждений

    printf("Name buffer address:    %x\n", buffer);
    printf("Command buffer address: %x\n", c);

%x ожидает unsigned int, тогда как вы указали указатель.

Для ссылки, стандарт C11, глава §7.21.6.1

o,u,x,X
Аргумент unsigned int преобразуется в unsigned восьмеричное (o), unsigned decimal (u) или беззнаковое шестнадцатеричное обозначение (x или X) в стиле dddd; [...]

Появление недопустимого аргумента вызывает неопределенное поведение.

Вы должны использовать %p для печати адреса

p Аргумент должен быть указателем на void. [...]

и передайте аргумент void *, потому что для типов указателей не поддерживается продвижение по умолчанию.

Было сказано, что,

  1. main() должен быть int main(void), по крайней мере, соответствовать стандарту.
  2. Вам нужно отправить декларацию вашей функции bo() потому что неявные декларации являются плохими и нестандартными.
+7
источник

Для печати адреса используйте "%p" вместо "%x". Вам также нужно отбрасывать void *

printf("Name buffer address:    %p\n", (void *) buffer);
+7
источник

Посмотрите другие вопросы по меткам или Задайте вопрос