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

Złe wartości zmiennych w tablicy char; Zmiana wartości w tablicy char po jej przepełnieniu

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
164 wizyt
pytanie zadane 19 marca 2021 w C i C++ przez jkm9182 Nowicjusz (220 p.)

Poniżej umieściłem kod programu w języku C:

#include <stdio.h>
int main()
{
    char x[20], y[20], z[20];
    do
    {
        printf(" x = ");
        scanf("%s",&x);
        printf(" x - %d\n",strlen(x));
        printf(" x = %s\n",x);
    }
    while(strlen(x)>20); 
   // Gdyby została wprowadzona zbyt duża ilość znaków, podaj wartość zmiennej jeszcze raz
    do
    {
        printf(" y = ");
        scanf("%s",&y);
        printf(" y - %d\n",strlen(y));
        printf(" y = %s\n",y);
    }
    while(strlen(y)>20);
    do
    {
        printf(" z = ");
        scanf("%s",&z);
        printf(" z - %d\n",strlen(z));
        printf(" z = %s\n",z);
    }
    while(strlen(z)>20);
    printf("%s %s %s\n",x,y,z);
    printf(" x - %d, y - %d, z - %d",strlen(x),strlen(y),strlen(z));
    getchar(); getchar();
}

Oraz przykładową odpowiedź programu:


W czerwonej ramce powinno być:
xxxxx yyyyyyy zzzzzzzzz
Pytanie brzmi: Co zrobiłem nie tak, że program zwraca mi złe ciągi znaków? Wystarczy wyjść z pętli do while i zmienne x, y od razu się psują. Dlaczego?

1 odpowiedź

0 głosów
odpowiedź 19 marca 2021 przez Michał Muzyka Pasjonat (24,080 p.)

Dzień dobry,
wydaje mi się, że błądem, który prowadzi do fałszywych wyników jest:

scanf("%s",&x);
scanf("%s",&y);
scanf("%s",&z);

wydaje mi się, że powinno to być tak:

scanf("%s",x);
scanf("%s",y);
scanf("%s",z);

Nazwa tablicy jest wskaźnikiem na pierwszy element, a Pan podaje do funkcji scanf podwójny wskaźnik (addres adresu tablicy)

Podobne pytania

0 głosów
1 odpowiedź 2,766 wizyt
0 głosów
2 odpowiedzi 1,418 wizyt
pytanie zadane 24 stycznia 2017 w C i C++ przez spvce Początkujący (260 p.)
0 głosów
1 odpowiedź 222 wizyt
pytanie zadane 24 stycznia 2021 w C i C++ przez muzyk Użytkownik (940 p.)

93,103 zapytań

142,077 odpowiedzi

321,571 komentarzy

62,445 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...