• 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)

Object Storage Arubacloud
0 głosów
153 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 (194,920 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 (194,920 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 (194,920 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 (194,920 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ź 307 wizyt
pytanie zadane 19 stycznia 2021 w C i C++ przez Mytwi Nowicjusz (160 p.)
0 głosów
1 odpowiedź 394 wizyt
pytanie zadane 22 kwietnia 2020 w C i C++ przez reken Początkujący (390 p.)
0 głosów
1 odpowiedź 145 wizyt
pytanie zadane 14 maja 2020 w C i C++ przez Daim123 Użytkownik (530 p.)

92,551 zapytań

141,393 odpowiedzi

319,522 komentarzy

61,936 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...