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

Zmienna do tekstu

Object Storage Arubacloud
0 głosów
321 wizyt
pytanie zadane 11 października 2018 w C i C++ przez ola123 Nowicjusz (180 p.)

Witam, mam na studiach napisać program wyświetlający dowolny tekst wprowadzony przez użytkownika z klawiatury (język C). Problem w tym, że jestem dopiero po pierwszych zajęciach i wszystkiego zaczynam się uczyć. Do tej pory pisaliśmy tylko programy pobierające zmienne liczbowe i nie wiem jak wprowadzić zmienną tekstową. Próbowałam w poniższy sposób, ale program wyświetla tylko pierwsze wprowadzone słowo. Jak powinien wyglądać kod, żeby wszystko działało poprawnie?

+ czy wpisywanie rozmiaru tablicy jest konieczne? Zostawianie pustego nawiasu kwadratowego powoduje wyświetlanie błędu, ale czy muszę koniecznie wprowadzać liczbę znaków, czy da się to jakoś ominąć?

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

int main (void)
{
    char tekst[100];
    printf("Wpisz tekst: ");
    scanf ("%s", tekst);
    printf(tekst);


    return 0;
}

 

1 odpowiedź

+2 głosów
odpowiedź 11 października 2018 przez PanRik Gaduła (4,510 p.)
edycja 11 października 2018 przez PanRik

Do ciągów znaków nie stosuj scanf, tylko gets fgets.
Scanf kończy wczytywanie do zmiennej , wtedy kiedy wykryje spacje lub znak nowej linii lub EOF.
 

#include <stdio.h>
#include <stdlib.h>
 
int main (void)
{
    char tekst[100];
    printf("Wpisz tekst: ");
    fgets(tekst, sizeof(tekst), stdin);
    printf(tekst);
 
 
    return 0;
}

Rozmiar tablicy musi być znany w trakcie kompilacji, chyba, że zastosujesz alokowanie dynamiczne, ale to chyba jeszcze się dowiesz na zajęciach :)

Edit: fgets jest dużo bezpieczniejszy, ponieważ zabezpiecza Cię to przed przepełnieniem stosu :)

komentarz 12 października 2018 przez j23 Mędrzec (194,920 p.)
edycja 12 października 2018 przez j23

Rozmiar tablicy musi być znany w trakcie kompilacji,

W C99 VLA są dozwolone (C11 mogą, ale nie muszą być).

 

ponieważ zabezpiecza Cię to przed przepełnieniem stosu :)

Raczej page-faultem, ewentualnie zniszczeniem ramek stosu.

Podobne pytania

+1 głos
2 odpowiedzi 1,206 wizyt
0 głosów
2 odpowiedzi 601 wizyt
pytanie zadane 9 listopada 2016 w JavaScript przez WojciechJot Gaduła (3,410 p.)
0 głosów
4 odpowiedzi 325 wizyt

92,566 zapytań

141,419 odpowiedzi

319,604 komentarzy

61,952 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!

...