присваивание создает указатель из целого числа без приведения [включено по умолчанию]

#c

#c #указатели

Вопрос:

Я погуглил это и вижу много ответов, но ни один из них не подходит для моей ситуации. Это мой основной ():

 char * cString;
puts("Please enter data you want to encrypt.");
cString = getInput(cString, amp;iStringSize);
printf("The message is: %snn", cString);

char * strEncrypt;
strEncrypt = encrypt(cString, offset);
printf("The encrypted message is: %snn", strEncrypt);

return 0;
  

Эта программа в основном считывает произвольные входные данные, а затем шифрует их. Это функция GetInput:

 char * getInput(char *cString, int * iStringSize)
{
    puts("Begin reading input.");
    char buffer[CHUNK];
    int iBufferSize;
    while(fgets(buffer, CHUNK - 1, stdin) != NULL)
    {
        iBufferSize = strlen(buffer);
        *iStringSize  = iBufferSize;
        cString = realloc(cString, sizeof(char) * (*iStringSize   1));
        strcat(cString, buffer);
    }
    printf("String size is: %dn", *iStringSize);
    puts("Reading successful");
    return cString;
}
  

Как показано выше, CString — это указатель на символ. Функция GetInput также возвращает указатель на символ. Тем не менее, я продолжаю получать сообщение: присваивание создает указатель из целого числа без приведения [включено по умолчанию]

Это происходит, когда я компилирую код.

То же самое происходит с этой функцией

 char * encrypt(char *str, int offset)
{
    puts("Begin encryption.");
    char * strEncrypt = malloc(sizeof(char) * (strlen(str)   1));
    int i;
    for(i = 0; i < strlen(str); i  )
    {
        //substitution algorithm using int offset variable.
        //I accessed str and strEncrypt using pointer arithmetic
    }

    puts("Encryption success!");
    return strEncrypt;
}
  

Пожалуйста, никаких предложений по обработке ошибок realloc.

Комментарии:

1. Объявлена ли ваша функция GetInput перед ее использованием? Если нет, компилятор подумает, что возвращает значение int.

2. в какой строке вы получаете предупреждение?

3. Пожалуйста, укажите номер строки, в которой вы получаете ошибку. И обратите внимание, что в getInput() функции вы увеличиваете iStringSize значение, перед этим оно должно быть инициализировано нулем.

4. Я получаю предупреждения в этих строках: CString = GetInput(CString, amp;iStringSize); strEncrypt = encrypt(CString, offset); поэтому, когда я присваиваю результат функций указателю.

5. Погуглив точное сообщение об ошибке в названии, почти половина многих ответов соответствует вашей конкретной ситуации, поэтому я не понимаю, почему вы думаете иначе. И это не единственная проблема в вашем коде. Вы передаете неопределенный указатель cString на getInput , вызывающий неопределенное поведение. Отправка его в realloc просто закрепляет это неправильное действие. Инициализируйте его значением NULL или действительным результатом выделения перед вызовом getInput .

Ответ №1:

Объявите getInpyt и зашифруйте функцию перед их первым использованием, в противном случае компилятор предполагает, что эти функции возвращают int и принимают переменное количество параметров.

Вы можете объявить их, используя любой из 3 способов, приведенных ниже.

  1. Включите соответствующие заголовочные файлы, содержащие их объявления.
  2. Включите объявления вручную в глобальную или локальную область перед первым обращением к ним.
  3. Переместите определение этих функций перед первым обращением к ним.