Я хотел создать простенькое приложение на С, Как когда я только учился написал его на с#.
Пока что приложение только читает из файла строчки. Но проблемы возникают когда- цыкл фор начинает идти по второму разу, Во-второй раз память для **ptext не добавляется и я не знаю что делать.
А еще количество символов в выделе ной памяти почему-то не равно 2 байтам, а может свободно гулять.
Я не знаю что мне с этим сделать и почему память выделеная *alloc такая странная.
Я ставил проверки на NULL(которые не срабатывали, и я вернул как и было), но я не думаю что у меня в пк не найдется 3 байтов.
#include <stdio.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
FILE* create_filestream(const char* filepath, char* buffer);
int read_text_in_file(FILE* filestream, char*** ptext, size_t* text_size);
int main() {
char buffer[32];
FILE* f = create_filestream("map.txt", &buffer);
char **text;
size_t text_size = NULL;
read_text_in_file(f, &text, &text_size);
}
int read_text_in_file(FILE* filestream, char*** ptext, size_t* text_size){
char buffer[32],* data = NULL;
size_t bytes_read, nums = 0, j = 0;
*text_size = 0;
*ptext = malloc(sizeof(char**));
**ptext = malloc(sizeof(char*));
while (!feof(filestream)) {
bytes_read = fread(&buffer, sizeof(char), sizeof(buffer), filestream);
if (ferror(filestream) || bytes_read == 0) return -1;
for (size_t i = 0; i < bytes_read; i++) {
if (buffer[i] == '\0') {
nums++;
j = 0;
if(*ptext = (char**)realloc(*ptext, sizeof(*ptext) + sizeof(char**)))
return -2;
continue;
}
(*text_size)++;
data = realloc(data, *text_size * sizeof(char));
data[*text_size - 1] = buffer[i];
**ptext = (char*)realloc(*ptext, (sizeof(**ptext) + sizeof(char*)));
*ptext[nums][j] = data[*text_size - 1];
j++;
}
}
printf((*ptext)[0]);
return 0;
}
FILE* create_filestream(const char* filepath, char* buffer) {
FILE* file;
file = fopen(filepath, "r+");
if (setvbuf(file, buffer, _IOFBF, sizeof(buffer)) != 0) {
fclose(file);
file = NULL;
return (FILE*)NULL;
}
return file;
}