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

Zmienna do tekstu

VPS Starter Arubacloud
0 głosów
317 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,202 wizyt
0 głosów
2 odpowiedzi 597 wizyt
pytanie zadane 9 listopada 2016 w JavaScript przez WojciechJot Gaduła (3,410 p.)
0 głosów
4 odpowiedzi 324 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...