Mam do napisania taki program w C "Dane są 2 teksty. Napisz funkcję znajdującą ostatnie wystąpienie dowolnego ze znaków tekstu drugiego w tekście pierwszym.". Póki co myślałam, że ogarnęłam jak wpisać tekst z pliku do tablicy, ale po wypisywaniu jej na ekran dostaję jakieś śmieci niezwiązane z plikiem. Ktoś wie co jest źle i może mnie pokierować dalej?
0
0
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE 256
#define MAX_LINES 200
//Dane są 2 teksty. Napisz funkcję znajdującą ostatnie wystąpienie dowolnego ze znaków tekstu drugiego w tekście pierwszym.
FILE *fd, *ff;
int main()
{
int i,len;
char *tekst1[MAX_LINES],bufor[MAX_LINE],*tekst2[MAX_LINES];
if(!(fd=fopen("DANE1.txt","r")))
{
printf("Blad otwarcia zbioru\n");
exit(2);
}
if(!(ff=fopen("DANE2.txt","r")))
{
printf("Blad otwarcia zbioru\n");
exit(2);
}
while(i<MAX_LINES && fgets(bufor,MAX_LINE,fd))
{
len=strlen(bufor);
bufor[len-1]='\0';
if(!(tekst1[i]=(char*)malloc((unsigned)len)))
{
printf("Brak pamieci\n");
exit(3);
}
strcpy(tekst1[i],bufor);
i++;
}
while(i<MAX_LINES && fgets(bufor,MAX_LINE,ff))
{
len=strlen(bufor);
bufor[len-1]='\0';
if(!(tekst2[i]=(char*)malloc((unsigned)len)))
{
printf("Brak pamieci\n");
exit(3);
}
strcpy(tekst2[i],bufor);
i++;
}
for(i=0;i<MAX_LINES;i++)
{
printf("%c\n",tekst1[i]);
}
fclose(fd);
fclose(ff);
}
0
Strlen zwraca ci długość stringa bez znaku '\0'. Poza tym nie czyścisz żadnej z tych tablic nigdy, wiec wystarczy ze pierwsza linijka jest dłuższa od drugiej i juz masz problem. Każdorazowo przed przeczytaniem linijki z pliku użyj bzero lub memset aby wyczyścić bufor.
0
W formatce do printf masz %c, czyli wydrukowanie pojedynczego znaku - użyj %s, aby wydrukować łańcuch znaków.