приведение от указателя к целому числу другого размера и присваивание делает целое число из указателя без приведения - PullRequest
0 голосов
/ 12 марта 2019
void KnightsFlip( FILE * fin, FILE * fout )
{
    int num;
    fscanf( fin, "%d", &num );
    fprintf( fout, "KnightsFlip:\n" );
    char *string;
    string = ( char ) malloc( ( num + 1 ) * sizeof( char ) );
    if ( string == NULL )
    {
        printf( "Not Memory found" );
    }
    string[num] = '\0';
    KnightsFlipRecursion( string, 0, num, fout );
    fprintf( fout, "\n" );
    free( string );
}

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

1 Ответ

1 голос
/ 12 марта 2019

В вашем коде есть пара проблем.

Сначала вы переводите результат с malloc() на char, а не char*. Это и является причиной ошибки, к которой относится ваш вопрос.

Во-вторых - что происходит, когда malloc() завершается неудачно, возвращая NULL. Код печатает сообщение точно, но оно все равно продолжается, как будто все в порядке.

Лучшим подходом может быть:

void KnightsFlip( FILE * fin, FILE * fout )
{
    int num;
    fscanf( fin, "%d", &num );
    fprintf( fout, "KnightsFlip:\n" );
    char *string;
    string = ( char* ) malloc( ( num + 1 ) * sizeof( char ) );
    if ( string == NULL )
    {
        printf( "Not Memory found" );
    }
    else
    {
        string[num] = '\0';
        KnightsFlipRecursion( string, 0, num, fout );
        fprintf( fout, "\n" );
        free( string );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...