Előre ismeretlen hosszúságú stringet olvasok be egy fájlból C-ben, mit rontottam el?
Egy függvény olvasná be a stringet, a függvény paraméterei a bemeneti file és a string amibe bele akarom olvasni.
#include <stdio.h>
#include <stdlib.h>
//Stringet beolvasó fgv
void readString(FILE* f, char **str){
char tmp; //Segédváltozó
int len = 0; //A string hossza
//Karakterenként beolvasom és realloc-olom
while((tmp = fgetc(f)) != EOF){
*str = realloc(*str, len++*sizeof(char));
*str[len-1] = tmp;
}
//A legvégére a lezáró 0-t beillesztem
*str = realloc(*str, len++ * sizeof(char) );
*str[len-1] = 0;
}
int main(){
char *s = NULL;
FILE* in = fopen("be.txt","r");
readString(in, &s);
printf("%s\n", str);
fclose(in);
free(str);
return 0;
}
Néztem valgrind-el is hogy mit ronthattam el de egyszerűen csak egy "Invalid write of size 1" hibát dobott... nem sikerült a realloc? Nem értem miért, elvi hiba szerintem nincs benne, talán a pointerekbe kavarodtam össze valahol, de nem tudom hol.
Előre is kösz a segítséget, és nézzétek el ha valami triviális kezdőhibát vétettem (valószínű igen), tapasztalatlan vagyok még a C-ben :)
*str = realloc(*str, len++*sizeof(char));
Ha char*-nak definialtad str-t, akkor azt kell atadni.
Valamint az elso lepesben 0 meretu tombot probalsz foglalni, amikor 1 meretu kellene.
str = realloc(str, ++len*sizeof(char));
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!