2017-01-11 6 views
-5

Я хочу, чтобы прочитать строку символов над stdin, поэтому я выбрал fgets. Но я получил это предупреждение: инициализация делает целое число из указателя без приведения.Предупреждение инициализации делает целое число от указателя без трансляции с помощью fgets

Вот мой код:

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

#define MAX_LINIA 301 

int main(int argc,char *argv[]){ 
    char *buffer; 
    printf("Enter the input\n"); 
    if (fgets(buffer,MAX_LINIA-1,stdin)==NULL) printf("Error") 
    else printf("%s", buffer); 
    return 0: 
} 
+4

' buffer' неинициализирован. Это неопределенное поведение *. – usr

+4

Код не должен выдавать предупреждение, указанное выше. Пожалуйста, покажите реальный код, который вы используете – Ctx

+1

, сначала 'printf (« Ошибка »)' -> 'printf (« Ошибка »);' и 'return 0:' -> 'return 0;' – BLUEPIXY

ответ

0

Вы используете buffer без инициализации его, что вызывает неопределенное поведение.

Вам не нужно использовать указатель, и может использовать массив символов вместо (учитывая максимальный размер уже определен):

char buffer[MAX_LINIA]; 

В fgets, то лучше записать в виде:

if(fgets(buffer,sizeof(buffer),stdin)==NULL) 
+2

Это не совсем правильно. Доступ к указателю не является UB в C, но разыменование его значения. – Olaf

 Смежные вопросы

  • Нет связанных вопросов^_^