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

wywala program przy wywolaniu funkcji

VPS Starter Arubacloud
0 głosów
161 wizyt
pytanie zadane 19 grudnia 2016 w C i C++ przez Don Corleone Obywatel (1,210 p.)

Chce otrzymac informacje z funkcji ktora oblicza ilosc cyfr,liter i dlugosc lancucha lecz po skompilowaniu wywala mi calkowicie program, pierwszy raz pisze z uzyciem wskaznikow i nie za bardzo wiem dlaczego tak sie dzieje.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define MAX 100

void licz(char *txt, int *dlugosc, int *cyfry, int *litery)
{
    *dlugosc=strlen(txt);
    *cyfry=0;
    *litery=0;

    for(int i=0; i<*dlugosc; i++)
    {
        if(isalpha(txt[i]))*litery=*litery+1;
        if(isdigit(txt[i]))*cyfry=*cyfry+1;
    }


}
int main()
{
    char txt[MAX]="7Ram pam pam87 pam pam 98";
    int dlugosc=0,cyfry=0,litery=0;
    licz(txt,dlugosc,cyfry,litery);
    printf("%d %d %d", litery,cyfry,dlugosc);

    return 0;
}

 

komentarz 19 grudnia 2016 przez niezalogowany
Wywala, tzn co się dzieje? Jest jakiś komunikat błędów? (pewnie segfault, bo próbujesz pisać po złym miejscu w pamięci)
komentarz 19 grudnia 2016 przez Don Corleone Obywatel (1,210 p.)
Program has stoped working, ten sam blad co jest jak sie siega np do elementu w tablicy ktorego nie ma.
komentarz 19 grudnia 2016 przez niezalogowany
Problem jest trywialny, całkiem dobry do nauki obsługi debuggera. Podepnij się jakimś (jeżeli piszesz w VS to jest wbudowany, w przeciwnym przypadku gdb) i spróbuj zrozumieć w czym rzecz.

Wskazówka: czym jest wskaźnik?

Wskazówka2: co przekazujesz do funkcji (w kontekście wskazówki 1), a czego spodziewa się funkcja?
komentarz 19 grudnia 2016 przez Don Corleone Obywatel (1,210 p.)
wskaznik wskazuje na adres, a wydaje mi sie ze przesylam zmienna, pierwszy raz tego uzywam to mam z tym lekki problem, pisze w code blocks i nie wiem co to debugger ;p
komentarz 19 grudnia 2016 przez niezalogowany
Otóż to - wskaźnik to adres obiektu w pamięci. Przekazujesz wartość, a funkcja spodziewa się adresu. Naprawa jest prosta, aby uzyskać adres do zmiennej wystarczy poprzedzić jej nazwę znakiem: &.Np aby uzyskać adres do zmiennej "myvar" piszesz "&myvar".

Popraw wywołanie funkcji i daj znać jak ci poszło :)

Debugger to program, który pozwala "na żywo" podglądać działanie programu, modyfikować go itp. Polecam zainteresować się tym tematem, bo ci się przyda ;)
komentarz 19 grudnia 2016 przez Don Corleone Obywatel (1,210 p.)
Dziala, dzieki :)

1 odpowiedź

0 głosów
odpowiedź 19 grudnia 2016 przez niezalogowany
Fixem było prosta zamiana "myvar" na "&myvar". Pełne rozwiązanie w komentarzach.

@Don Corleone jakbyś mógł oznaczyć ten post jako najlepszy, to zbłąkane osoby by wiedziały że ten problem jest rozwiązany i nikt niepotrzebnie by tutaj nie wchodził :)

Podobne pytania

–1 głos
1 odpowiedź 143 wizyt
0 głosów
2 odpowiedzi 150 wizyt
pytanie zadane 3 września 2015 w C i C++ przez 0xf Dyskutant (8,180 p.)
+1 głos
4 odpowiedzi 1,457 wizyt
pytanie zadane 17 października 2015 w C i C++ przez Michał Gibas Pasjonat (19,610 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 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!

...