Была идея проверить, что если данный 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. Я также обновил изображение до нового результата.
Надеюсь, это лучше и ближе к конечной цели проверки того, можно ли выделять память или нет.
Цените все Помогите. Спасибо!