Łączenie łańcucha z pojedynczym znakiem odczytanym z pliku

0

Witam
Chciałem zbudować program który będzie do podanego łańcucha znaków dodawał znak odczytany z pliku.
Niestety program nie potrafi tego skompilować. Zależy mi aby z pliku znaki były pojedynczo odczytywane i w taki sposób dodawane.

main(){
	
	FILE  *plik;
	char c;
	char podstawa [30]= "hi";
	
	
	if ((plik=fopen("C:/test/test.txt", "r+"))==NULL) {
     printf ("Nie mogę otworzyć pliku test.txt do zapisu!\n");
     exit(1);
     }
     
     while((c=fgetc(plik))!=EOF){
     	strcat(podstawa,c);
     	printf("%s",podstawa);
     	
     	     	
     }     
     fclose (plik);

   return 0;	
} 
0

Nie patrzę nawet dalej bo już w pierwszej linii widzę błąd w składni a nie wiem jaki Ty dostajesz błąd, skoro twierdzisz że "program nie potrafi tego skompilować" - to znaczy, że odpala się ale nie działa czy sypie błędami podczas kompilacji? Może powiesz nam jakimi?

A błąd, który widzę to:

 main() {}

Od sporego czasu już piszemy:

int main() { /* code */ return 0; } 
0

błąd dotyczy linijk strcat(podstawa,c);
22 7 C:\Users\xxx\Desktop\programowanie\START.c [Note] expected 'const char *' but argument is of type 'char'

PS : a co dotyczy tego int main to nawet nie wiedzialem bo programy działały mi zawsze poprawnie z samym "main". Nie zauważyłem by miało to wpływ na wykonywany program.

1

zamień: strcat(podstawa,c);
na:

L=strlen(podstawa);  // int L;
if(L<sizeof(podstawa)-1)
  {
   podstawa[L++]=c;
   podstawa[L]=0;
  }

lub:

*add=c; // char add[2]="*";
strcat(podstawa,add);

lub:

//int c;
strcat(podstawa,(char*)&c); // TO JEST BARDZO BRZYDKIE BO NIE NA KAŻDY KOMPUTER, czytać o Endianach
0

działa xd jedna rzecz mnie zaciekawiła... dlaczego w drugim rozwiązaniu musi być char add[2]=""; ? czemu nie może być char add[1]=""; ?

0

Każdy ciąg znaków musi kończyć się znakiem końca ciągu znaku, i właśnie na to potrzeba ten jeden dodatkowy znak. Inaczej program nie wiedziałby w którym miejscu skończyć czytać z pamięci, i próbował by czytać aż do końca pamięci, co skończyłoby się błędem ochrony pamięci.

0

dzięki zellus :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1