Назначьте строку для int в C - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть следующий код:

#include <stdio.h>

int main(void) {
    int i = "hello world";

    printf("%d", i);

    return 0;
}

, почему присвоение переменной string int не приводит к ошибке компиляции, но выводит значение мусора.

Редактировать 1:

Многие ответы предлагали не игнорировать предупреждение. Я написал этот код на ideone, который, к сожалению, не дал мне никакого предупреждения.

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Я полагаю, что он будет выполнять указатель на преобразование int. Это должно быть предупреждение, указывающее на преобразование без приведения.

1 голос
/ 10 апреля 2020
int i = "hello world";

При этом вы присваиваете адрес строкового литерала "hello world" в памяти объекту int i, что в большинстве случаев является неопределенным поведением, поскольку значение местоположения в памяти во многих случаях выходит за рамки область, которую может содержать объект типа int.

Это неопределенное значение затем печатается с помощью:

 printf("%d", i);

Тем не менее, компилятор должен выдавать предупреждение при этом без явного преобразования Например, когда я скомпилировал ваш код с помощью g cc, он дал:

предупреждение: инициализация 'int' из 'char *' делает целое число из указателя без приведения [-Wint-преобразование]

Никогда не игнорируйте предупреждения компилятора.

...