• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z zapisanie tablicy char do pliku używając niebufoowanych operacji(język C)

0 głosów
409 wizyt
pytanie zadane 30 czerwca 2020 w C i C++ przez Maciej Mierzyński Nowicjusz (120 p.)

Niestety gdy próbuję zapisać tablice random_num typu char do pliku txt to zapisują się znaki tego typu "

(>1Y7V^

"

Nie udało mi się znaleźć wytłumaczenia dlaczego tak się dzieje i co trzeba zrobić aby dało się zapisać zawartość zmiennej char. Bardzo proszę o pomoc.

int main(int argc, char *argv[]){

    int output_fd, wr;
    char random_num[10];

    srand(time(NULL));

    for(int i = 0; i < sizeof(random_num); i++){
        random_num[i] = rand() % 100;
    }

    output_fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0644);

    if(output_fd == -1){
        printf("Problem with output_fd\n");
        return 1;
    }

    wr = write(output_fd, random_num, sizeof(random_num));

    if(wr == -1){
        printf("Problem with write\n");
        return 2;
    }
}

 

komentarz 30 czerwca 2020 przez j23 Mędrzec (195,220 p.)

gdy próbuję zapisać tablice random_num typu char do pliku txt to zapisują się znaki tego typu "

No dobrze, ale co tam w pliku powinno być według Ciebie?

komentarz 30 czerwca 2020 przez Maciej Mierzyński Nowicjusz (120 p.)
Chciałbym tam zapisać zawartość tej tablicy czyli dziesięć wylosowanych liczb
1
komentarz 30 czerwca 2020 przez j23 Mędrzec (195,220 p.)

OK, ale jeśli taki plik otworzysz w notatniku, to ów notatnik potraktuje zawartość pliku jak tekst, a nie ciąg liczb.

W Linuksie plik możesz podejrzeć wywołując w terminalu: hexdump -e '/1 "%u "' <nazwa-pliku>

Z drugiej strony, jeśli to ma być plik txt, to wylosowaną liczbę powinieneś wpierw przekonwertować na tekst i w formie tekstowej zapiswać do pliku.

Użyj funkcji sprintf.

 

komentarz 30 czerwca 2020 przez Maciej Mierzyński Nowicjusz (120 p.)

Przekonwertowałem i gdy odpalę zawartość pliku przez terminal za pomocą komendy jaką podałeś to widać te liczby, ale jeżeli normalnie odpalę notatnik to nadal wychodzi wynik typu: 2%Fb
D('P

int main(int argc, char *argv[]){

    int output_fd, wr, to_str;
    char random_num[10];
    char buffer[50];

    srand(time(NULL));

    for(int i = 0; i < sizeof(random_num); i++){
        random_num[i] = rand() % 100;
        printf("%d\n", random_num[i]);
    }

    output_fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0644);

    if(output_fd == -1){
        printf("Problem with output_fd\n");
        return 1;
    }

    to_str = sprintf(buffer, "%s", random_num);

    //printf("%s\n", buffer);

    wr = write(output_fd, buffer, sizeof(random_num));

    if(wr == -1){
        printf("Problem with write\n");
        return 2;
    }
}

 

1
komentarz 30 czerwca 2020 przez j23 Mędrzec (195,220 p.)
for (int i = 0; i < sizeof(random_num); ++i) {
    to_str = sprintf(buffer, "%i\n", (int)random_num[i]);
    wr = write(output_fd, buffer, to_str);
}

 

komentarz 1 lipca 2020 przez Maciej Mierzyński Nowicjusz (120 p.)
Działa, bardzo dziękuję. Tylko mam jeszcze jedno pytanie. Jaką funkcję spełnia dopisanie "(int)" przy nazwie argumentu, którym jest tablica?
1
komentarz 1 lipca 2020 przez j23 Mędrzec (195,220 p.)

To jest rzutowanie, a zastosowałem je, bo random_num jest tablicą wartości typu char, a sprintf oczekuje wartości typu int.

komentarz 1 lipca 2020 przez Maciej Mierzyński Nowicjusz (120 p.)
Okej, dzięki za pomoc i wytłumaczenie

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 701 wizyt
pytanie zadane 19 stycznia 2021 w C i C++ przez Mytwi Nowicjusz (160 p.)
0 głosów
1 odpowiedź 945 wizyt
pytanie zadane 22 kwietnia 2020 w C i C++ przez reken Początkujący (390 p.)
0 głosów
1 odpowiedź 318 wizyt
pytanie zadane 14 maja 2020 w C i C++ przez Daim123 Użytkownik (530 p.)

93,630 zapytań

142,552 odpowiedzi

323,055 komentarzy

63,136 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2174p. - dia-Chann
  2. 2153p. - DziarnowskiJ
  3. 2123p. - Łukasz Piwowar
  4. 2105p. - CC PL
  5. 2077p. - raydeal
  6. 2068p. - Adrian Wieprzkowicz
  7. 2010p. - rucin93
  8. 1957p. - Maurycy W
  9. 1887p. - Łukasz Eckert
  10. 1855p. - Michal Drewniak
  11. 1811p. - rafalszastok
  12. 1777p. - robwarsz
  13. 1588p. - Tomasz Bielak
  14. 1491p. - Rafał Trójniak
  15. 1377p. - ssynowiec
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...