C - Это действительный способ проверить, достигнут ли размер mallo c d или нет? (Использование fgets () + strlen ()) - PullRequest
1 голос
/ 10 июля 2020

Была идея проверить, что если данный char * не передает назначенный размер mallo c, однако я не уверен, что это отличный способ проверить.

Примечание: извините за беспорядочный код, проблемы с отступом.

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

bool start_or_reset(int allocated_memory_lenght_size){

printf("allocated_memory_lenght_size: %d\n\n", allocated_memory_lenght_size);
int allocated_memory_lenght_reached = 0;
int line_count = 0, i = 0;

char line[255];
char * file_contents = malloc(allocated_memory_lenght_size);
file_contents[0] = 0;

if (!file_contents){
    perror("Malloc failed. Exiting.\n");
    exit(1);
}

FILE * fp1 = fopen("read_from_this_file.txt", "r");
FILE * fp2 = fopen("read_from_this_file.txt", "r");

if (fp1 == NULL || fp2 == NULL){
    perror("The file doesn't exist. Exiting.\n");
    exit(1);
}

while (fgets(line, sizeof(line), fp1) != NULL){
    line_count++;
}
printf("line count: %d\n", line_count);

while (fgets(line, sizeof(line), fp2) != NULL){
    
    allocated_memory_lenght_reached += strlen(line);
    i++;

    // Add +1 for allocation if \0 is met:
    if (i == line_count)
        allocated_memory_lenght_reached += 1;

    printf("allocated_memory_lenght_reached: %d\n", allocated_memory_lenght_reached);

    if (allocated_memory_lenght_reached > allocated_memory_lenght_size)
        return 1;
    
    strcat(file_contents, line);
}

printf("\nfile_contents:\n\n%s\n", file_contents);

free(file_contents);
fclose(fp1);
fclose(fp2);
return 0;
}

int main(){

bool malloc_is_valid;
int allocated_memory_lenght_size = 56;

// Step 1
// Check if malloc is enough or not, then return 0 or 1
malloc_is_valid = start_or_reset(allocated_memory_lenght_size);

printf("\n0: Malloc successful, 1: Malloc unsuccessful\n");
printf("malloc_is_valid returns: %d\n", malloc_is_valid);

return 0;
}

Новый вывод консоли: введите описание изображения здесь

Что я изменил: я убедился, что он проверяет \ 0 последнюю строку в последней строке char * file_contents и добавляет +1 к требуемому размеру выделения в alloced_memory_lenght_reached. Я также обновил изображение до нового результата.

Надеюсь, это лучше и ближе к конечной цели проверки того, можно ли выделять память или нет.

Цените все Помогите. Спасибо!

...