newbie: html parsen

04/11/2013 - 14:47 von tokauf | Report spam
Hallo,

hier ist meine Funktion. Sie erhàlt als Parameter einen HTML-String (char *s) und soll den normalen Text aus dem HTML extrahieren:

void parse_html2(char *s, int n) {

int i;
//char res[1024];

char *tmp = (char*) malloc(n + 1);
if (tmp == NULL) {
fprintf(stderr, "malloc-error: %s", strerror(errno) );
exit(1);
}

for (i = 0; i < n; i++) {

if (s[i] == '>') {

++i;
while (s[i] != '<') {

tmp[i] += s[i];
//printf("%c", tmp[i]);
i++;
}

tmp[strlen(tmp) + 1] = 0;
printf("%s", tmp);

} // end if
} // end for
}

Wenn ich das Programm starte, erhalte ich diesen Fehler:

Speicherzugriffsfehler (Speicherabzug geschrieben)

Was ist falsch?

Gruss Thomas
 

Lesen sie die antworten

#1 Marcel Müller
04/11/2013 - 17:16 | Warnen spam
Moin,

On 04.11.13 14.47, wrote:
hier ist meine Funktion. Sie erhàlt als Parameter einen HTML-String (char *s) und soll den normalen Text aus dem HTML extrahieren:

void parse_html2(char *s, int n) {

int i;
//char res[1024];

char *tmp = (char*) malloc(n + 1);
if (tmp == NULL) {
fprintf(stderr, "malloc-error: %s", strerror(errno) );
exit(1);
}

for (i = 0; i< n; i++) {

if (s[i] == '>') {

++i;
while (s[i] != '<') {

tmp[i] += s[i];
//printf("%c", tmp[i]);
i++;
}

tmp[strlen(tmp) + 1] = 0;
printf("%s", tmp);

} // end if
} // end for
}

Wenn ich das Programm starte, erhalte ich diesen Fehler:

Speicherzugriffsfehler (Speicherabzug geschrieben)

Was ist falsch?



Die innere While-Schleife endet nicht am Ende des Strings, sondern macht
einen Zugriff über s und tmp hinaus. Und dann knallt es.

Das ist aber sicher nicht der einzige Fehler. Mindestens mal die Zeile
tmp[i] += s[i]; ist suspekt. Hier werden ASCII-Codes addiert. Ferner
wird auf uninitialisierten Speicher (tmp[i]) zugegriffen.


Marcel

Ähnliche fragen