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, botów: 0