Odczyt z pliku i zapis do pliku z alokacja pamięci

0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int agrc(), char *agrv[])
{
	int liczbawierszy = 0, dlugoscslowa;
	char znak,**tablica;
	int k;
	FILE * wyrazy;
	FILE * zapis;
	fopen_s(&wyrazy, "moje wyrazy.txt", "r");  //otwiera mój dokument tekstowy
	fopen_s(&zapis, "moj zapis.txt", "w");
	while ((znak = fgetc(wyrazy)) != EOF)  // zlicza wersy
	{
		if (znak == '\n') liczbawierszy++;
	}
	fseek(wyrazy, 0,0); // przywraca program do początku pliku
	tablica = (char**) malloc (liczbawierszy *sizeof(*tablica)); // alokacja pamięci na pierwszy wymiar tablicy 
	char s[] = { sizeof(liczbawierszy) };
	for (k = 0; k < liczbawierszy; k++)
	{
		fscanf_s(wyrazy, "%s", s);
		dlugoscslowa = strlen(s);
		tablica[k] = (char*) malloc ((dlugoscslowa+1) *sizeof(**tablica));
		strcpy_s(tablica [k], sizeof(liczbawierszy), s);
	}
	for (k = 0; k < liczbawierszy; k++)
	{
		fprintf(zapis, "%s\n", tablica[k]);
		printf("%s\n"), tablica[k];
		
	}
	for (k = 0; k < liczbawierszy; k++) free(*tablica[k]);
	free(tablica);
	fclose(wyrazy);
	fclose(zapis);


	


	system("pause");
}

Pisze program w visualu 2013, docelowo mam odczytać wyrazy z pliku zarezerwować pamięć na wielowymiarową tablicę i przekopiować to a następnie posortować (sortowanie jest nieistotne teraz ) efekt działania programu to null null null zdaje się że nie chce pobierać wyrazów z pliku do tablicy s.
Proszę o pomoc

0

Zmień

FILE * wyrazy;
    FILE * zapis;

na

FILE  wyrazy;
    FILE  zapis;
</del>

Dobra inaczej. Czemu nie użyjesz zwykłego fopen()?

 
wyrazy = fopen( "moje wyrazy.txt", "r");  //otwiera mój dokument tekstowy
zapis = fopen( "moj zapis.txt", "w");
0

Visual pisze że to może uszkadzać pamięć i nie pozwala na to swoją drogą to czytałem w necie że to powoduje errory w działaniu programu
swoja droga ani tak ani tak nie działa visual jest bardzo zaawansowany i nie dopuści kompilowania programów które mogą powodować błędy w działaniu

0

Pierwsze słyszę, żeby fopen() był groźny. Jeżeli na prawdę nie chcesz się odrywać od fopen_s() to Twój błąd polega na tym, że deklarujesz wskaźniki

FILE * wyrazy;
FILE * zapis; 

Nie przypisujesz do nich nic. A na koniec używasz wskaźników na te wskaźniki

fopen_s(&wyrazy, "moje wyrazy.txt", "r");  //otwiera mój dokument tekstowy
fopen_s(&zapis, "moj zapis.txt", "w");

Czyli błąd za błędem.

Rozwiązania są dwa. Albo nie deklaruj wskaźników tylko normalne obiekty typu FILE, albo deklaruj wskaźniki, ale potem dynamicznie stwórz im obiekty. Potem w fopen_s() nie przakazuj &wyrazy tylko po prostu wyrazy. I na koniec zwolnij dynamicznie alokowaną pamięć, żebyś nie miał wycieków

0

Niestety to nie zmienia działania programu wciąż null a liczbę wierszy zlicza ...
Pierdziele pobiorę visuala 2008 może będzie lepiej mi szło ...

0

A wgl próbowałeś debugować?

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