ISO C++ forbids comparison between pointer and integer [-fpermissive]

91
25 января 2021, 08:20

Проблема заключается в том, что код спокойно выполняется на онлайн gcc компиляторах и MSVS, а у меня - нет. Ошибку видит в строках while (string[i] != '\0') и ошибкуerror: invalid conversion from ‘char’ to ‘char*’ [-fpermissive] в строке split_string[i] = '\0';

gcc version 7.4.0

#include <iostream>
#include <cstdint>
#include <cstring>
#define MAXLEN UINT8_MAX
using namespace std;
void print(char** string)
{
    uint16_t i = 0;
    while (string[i] != '\0')
    {
        cout << string[i] << " ";
        i++;
    }
}
char** reverse_string(char** split_string, char* string)
{
    char temp;
    uint16_t counter = 0;
    char* token = strtok(string, " ");
    while (token != NULL)
    {
        split_string[counter] = token;
        counter++;
        token = strtok(NULL, " ");
    }
    for (uint16_t x = 0; x < counter; x++)
    {
        char* tempstr = split_string[x];
        uint16_t length = strlen(tempstr);
        for (uint16_t i = 0, j = length - 1; i < j; i++, j--)
        {
            temp = split_string[x][i];
            split_string[x][i] = split_string[x][j];
            split_string[x][j] = temp;
        }
    }
    return split_string;
}

int main()
{
    char string[MAXLEN];
    char* split_string[MAXLEN];
    for (uint16_t i = 0; i < 100; i++)
    {
        split_string[i] = '\0';
    }
    cout << "Enter your words $ ";
    cin.getline(string, MAXLEN);
    char** reversed_string = reverse_string(split_string, string);
    cout << "Reversed string:   ";
    print(reversed_string);
    return 0;
}
Answer 1

Сравнение

string[i] != '\0'

это попытка сравнения значения указателя string[i] со значением '\0'. В С++98 '\0' являлся допустимой формой null-pointer constant, то есть в C++98 такое сравнение интерпретировалось как

string[i] != 0
// или
string[i] != NULL

Это обычное сравнение с null-указателем. С таким же успехом вы могли написать

string[i] != false

и этот код являлся бы корректным в С++98.

Но начиная с C++11 уже не разрешается использовать '\0' (или false) в качестве null-pointer constant и этот код является ошибочным.

Все то же самое относится и к присваиванию split_string[i] = '\0'

READ ALSO
Как использовать метод dataset в jQuery?

Как использовать метод dataset в jQuery?

У меня возник вопрос, как я могу удалить блоки через datasetЧтобы каждый блок удалялся по отдельности по клику

143
Не изменяется цвет ссылки при наводке хотя так работает с почтой

Не изменяется цвет ссылки при наводке хотя так работает с почтой

Я использую шаблон сайта и хотел бы спросить где параметр находится который изменяет цвет ссылки при наводкеЯ уже пробовал менять параметры...

110
варианты meta description

варианты meta description

Какие варианты description допускаются в мета теге? Те

133
Не могу выбрать элемент JS [дубликат]

Не могу выбрать элемент JS [дубликат]

Есть div class="top", выбираю в нём строку пустой таблицы с помощью documentquerySelector(

132