Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2012-01-08 19:16:48

  hello_world - Członek DUG

hello_world
Członek DUG
Skąd: Rymanów Zdrój
Zarejestrowany: 2010-06-03
Serwis

Mysql + C połączenie

Mam problem z polaczeniem z bazą Mysql z poziomu C
Wyskakuje mi komuniikat naruszenie pamieci przy takim kodzie

Kod:

#include <mysql/mysql.h>
#include <stdio.h>
#include <string.h>

int main()
{
  MYSQL *mysql;
  MYSQL_RES *res;
  MYSQL_ROW row;
  char *query;
  int t,r;
  mysql = mysql_init(0);
  if (!mysql_real_connect(mysql,"localhost","root","","amarokdb",0,NULL,0))
  {
  printf( "Error connecting to database: %s\n",mysql_error(mysql));
  }
  else printf("Connected...\n");


  printf("Podaj zapytanie do bazy danych\n"); ///////////////////////
  scanf("%s", query); ////////////////////////////Tu jest kość niezgody


  t=mysql_real_query(mysql,query,(unsigned int) strlen(query));
  if (t)
  {
  printf("Error making query: %s\n",
  mysql_error(mysql));
  }
  else printf("Poprawnie\n");
  res = mysql_use_result(mysql);
  while ((row=mysql_fetch_row(res)) != NULL ) {
  if(row<0) break;
  for(t=0;t<mysql_num_fields(res);t++){
    printf("%s ",row[t]);
    }
  printf("\n");
  }
  mysql_close(mysql);
  return 0;
  }

a przy kodzie  takim jest w porządku

Kod:

#include <mysql/mysql.h>
#include <stdio.h>
#include <string.h>

int main()
{
  MYSQL *mysql;
  MYSQL_RES *res;
  MYSQL_ROW row;
  char *query;
  int t,r;
  mysql = mysql_init(0);
  if (!mysql_real_connect(mysql,"localhost","root","","amarokdb",0,NULL,0))
  {
  printf( "Error connecting to database: %s\n",mysql_error(mysql));
  }
  else printf("Connected...\n");


  query = "show tables"; //tu jest już poprawnie
  
  t=mysql_real_query(mysql,query,(unsigned int) strlen(query));
  if (t)
  {
  printf("Error making query: %s\n",
  mysql_error(mysql));
  }
  else printf("Poprawnie\n");
  res = mysql_use_result(mysql);
  while ((row=mysql_fetch_row(res)) != NULL ) {
  if(row<0) break;
  for(t=0;t<mysql_num_fields(res);t++){
    printf("%s ",row[t]);
    }
  printf("\n");
  }
  mysql_close(mysql);
  return 0;
  }

Zależy mi na wersji pierwszej bo mam możliwość dynamicznie odwolywać sie do tabel


PS Da się w znaczniku "code" zastosować np kod pogrubienia?

Ostatnio edytowany przez hello_world (2012-01-08 19:22:03)

Offline

 

#2  2012-01-08 20:54:30

  gindek - Zubr, bydle na etacie.

gindek
Zubr, bydle na etacie.
Skąd: Z puszczy.
Zarejestrowany: 2008-12-08

Re: Mysql + C połączenie

nie zaalokowałeś pamięci.

albo

Kod:

query = new char[80];

albo

Kod:

query = (char * ) malloc( 80);

bez allokacji pamieci kompilator sam tego nie zrobi ( albo ja nie u miem tak zrobic );
jak dasz sobie

Kod:

char *query;
if ( !query) printf("%s", " bledne cycki " );

to zobaczysz ze nie ma allokowanej pamieci, a tym samym jak sie odwolujesz do tego bloku ( na ktory wskazuje query), to sie odwujuesz do kosmosu, jakichs smieci w pamieci , bog wie skad, to system wywala naruszenie ochrony pamieci.

[edit]
oczywiscie ogranicza ci to wejscie :] do jakiegos ciagu danych;
jak chesz miec brak takiego ograniczenia to albo pobieraj query jako parametr do programu, albo pobieraj go z pliku. ( jak mowielm na wejscie nie wiem jak to zrobic ).

Ostatnio edytowany przez gindek (2012-01-08 20:55:58)


" Wojny przychodzą i odchodzą, a moi żołnierze są wieczni"


"Zbuduj mały, dziarski router z udostępnionych przez prowadzącego części od Kamaza?"

Offline

 

#3  2012-01-09 10:29:39

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Mysql + C połączenie

gindek napisał(-a):

Kod:

query = new char[80];

Mistrzu, wyjaśnij mi co w C robi jakiś "new"?

bez allokacji pamieci kompilator sam tego nie zrobi ( albo ja nie u miem tak zrobic );

Stawiałbym na to drugie, bo:

Kod:

char query[80];

jest dokładnie tym czego nie potrafisz a co kompilator robi sam ;)

Inna sprawa że takie podejście wybitnie fujastym jest (zakładanie że coś nie jest dłuższe niż ileśtam w C z reguły kończy się smutno sygnałem 11). Na wczytywanie linii dowolnej długości z wejścia jest fafnaście różnych metod. Ogólnie to jeśli piszesz w C zainteresuj się Glibem, bo bez tego trudno dzisiaj robić coś konkretnego.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#4  2012-01-09 20:08:51

  gindek - Zubr, bydle na etacie.

gindek
Zubr, bydle na etacie.
Skąd: Z puszczy.
Zarejestrowany: 2008-12-08

Re: Mysql + C połączenie

ethanak napisał(-a):

gindek napisał(-a):

Kod:

query = new char[80];

Mistrzu, wyjaśnij mi co w C robi jakiś "new"?

bez allokacji pamieci kompilator sam tego nie zrobi ( albo ja nie u miem tak zrobic );

Stawiałbym na to drugie, bo:

Kod:

char query[80];

jest dokładnie tym czego nie potrafisz a co kompilator robi sam ;)

no fakt z new wtopka, raz c raz c++ i naturalnie odruchowo mi przyszlo do glowy.
ale z tablica to juz zlosliwosc i czepianie sie :P ( jeden powie że kompilator to sam robi, inny że programista definiuje rozmiar tablicy ).

noo ale tak to juz jest w dzisiejszym swiecie, albo sie nie odzywasz, albo trzeba pisac tłumaczące wszystko posty na 140 lini z komentarzem do kazdej linijki coby potem sie ktos nie przypieprzyl xd.

Ostatnio edytowany przez gindek (2012-01-09 20:10:35)


" Wojny przychodzą i odchodzą, a moi żołnierze są wieczni"


"Zbuduj mały, dziarski router z udostępnionych przez prowadzącego części od Kamaza?"

Offline

 

#5  2012-01-10 12:33:29

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Mysql + C połączenie

gindek napisał(-a):

ale z tablica to juz zlosliwosc i czepianie sie :P ( jeden powie że kompilator to sam robi, inny że programista definiuje rozmiar tablicy ).

E tam czepianie.
Programista definiuje rozmiar tablicy, a kompilator decyduje jak przydzielić pamięć. I uwierz, robi to sam, odkąd pamiętam nigdy mu w tym nie pomagałem :)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#6  2012-01-10 13:16:57

  hello_world - Członek DUG

hello_world
Członek DUG
Skąd: Rymanów Zdrój
Zarejestrowany: 2010-06-03
Serwis

Re: Mysql + C połączenie

ethanak napisał(-a):

Na wczytywanie linii dowolnej długości z wejścia jest fafnaście różnych metod. Ogólnie to jeśli piszesz w C zainteresuj się Glibem, bo bez tego trudno dzisiaj robić coś konkretnego.

Czy mozesz nakierować z tym fafnaśćie w tym konkretnym przykładzie?
Jeśli błądze to mnie popraw ale dlaczego miałbym używać biblioteki gnome do prostych projektów, które można wykonać pod konsolą?

Ostatnio edytowany przez hello_world (2012-01-10 13:17:23)

Offline

 

#7  2012-01-10 14:24:30

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Mysql + C połączenie

glib nie jest biblioteka gnome, to po pierwsze (przykladem konsolowej aplikacji korzystajacej z gliba moze by MC). jesli bawi cie wywazanie otwartych drzwi - w ramach treningu napisz sobie fafnascie plus pierwsza funkcje wczytujaca z wejscia linie dowolnej dlugosci.
zaproponowalem gliba, bo biblioteka jest stabilna i popularna. twoja sprawa czy z propozycji skorzystasz czy olejesz.
tylko... patrzac na twoje problemy ze zrozumieniem czym jest wskaznik nie spodziewalbym sie efektow w biezacej pieciolatce.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#8  2012-01-10 17:04:08

  hello_world - Członek DUG

hello_world
Członek DUG
Skąd: Rymanów Zdrój
Zarejestrowany: 2010-06-03
Serwis

Re: Mysql + C połączenie

@ethanak

glib nie jest biblioteka gnome, to po pierwsze (przykladem konsolowej aplikacji korzystajacej z gliba moze by MC). jesli bawi cie wywazanie otwartych drzwi - w ramach treningu napisz sobie

Nic mnie w języku C nie bawi, a raczej przeraża.

fafnascie plus pierwsza funkcje wczytujaca z wejscia linie dowolnej dlugosci.

Nie rozumiem,

zaproponowalem gliba, bo biblioteka jest stabilna i popularna. twoja sprawa czy z propozycji skorzystasz czy olejesz.

Zapewne jak poznam i okaże się pomocna to skorzystam

tylko... patrzac na twoje problemy ze zrozumieniem czym jest wskaznik nie spodziewalbym sie efektow w biezacej pieciolatce.

Nie mierz ludzi swoja miarą ;) Widziałem ludzi co do których bym sie nie podpisał. Często mnie pozytywnie zaskakiwali.

http://pl.wikipedia.org/wiki/GLib
Ale nie sądzę aby połączenie z mysqlem i operowanie na bazie akurat wymaga wynalezienia koła(czyt. użycia biblioteki glib)

Ostatnio edytowany przez hello_world (2012-01-10 17:04:37)

Offline

 

#9  2012-01-10 21:46:38

  gindek - Zubr, bydle na etacie.

gindek
Zubr, bydle na etacie.
Skąd: Z puszczy.
Zarejestrowany: 2008-12-08

Re: Mysql + C połączenie

rozwiazanie
funkcja z reallokacja buffora, jako parametr podaje sie ile bajtow ma byc dopisywane kazdorazowo.


http://codeaddicts.wordpress.com/2009/10/21/reading … -length-in-c/

tutaj jest kod

Kod:

#include <mysql/mysql.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *dgets(FILE *origem, int tamanhobase)
{
int i, allocs;
char *aux, letra;
    if (tamanhobase <= 0) return 0;
    i = allocs = 0;
    letra = 0;
    aux = (char*)malloc(tamanhobase*sizeof(char));

        while ( (origem == stdin) |  EOF)
        {
                if (!(letra = getc(origem))) return 0;
                if ( letra == '\n') break; 
        if (origem != stdin || letra != '\n')               // check for the new value read
                {
                    if (!allocs || i >= tamanhobase*allocs)
                    {
            aux = realloc(aux, ++allocs*tamanhobase*sizeof(char));    // make space for [tamanhobase] more letters
            }
                    aux[i++] = letra;
                }
        }
    aux[i] = 0;
    return aux;
}

int main()
{
   char *pointer;
   pointer = dgets(stdin, 2);
   printf("\n%s\n%s\n", "wyjscie",pointer);



return 0;
}

" Wojny przychodzą i odchodzą, a moi żołnierze są wieczni"


"Zbuduj mały, dziarski router z udostępnionych przez prowadzącego części od Kamaza?"

Offline

 

#10  2012-01-11 14:00:41

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Mysql + C połączenie

gindek napisał(-a):

rozwiazanie
funkcja z reallokacja buffora, jako parametr podaje sie ile bajtow ma byc dopisywane kazdorazowo.

Tak, tylko w glibie masz funkcje które to robią (konkretniej g_io_channel_read_line() i podobne) - po co wynajdywać ponownie koło?

Kod:

   gchar *ptr;
   gsize t;
   GIOChannel *inp=g_io_channel_unix_new(0);
   g_io_channel_read(inp,&ptr,NULL,NULL,NULL);
   ptr[t]=0; // zgadnij co to?
   printf("Wprowadziłeś '%s'\n",ptr);

Jakoś trochę krócej, nie?

Co ważne:

GLib is a general-purpose utility library, which provides many useful data types, macros, type conversions, string utilities, file utilities, a mainloop abstraction, and so on. It works on many UNIX-like platforms, Windows, OS/2 and BeOS. GLib is released under the GNU Library General Public License (GNU LGPL).

Czyli nie jest żadną prywatną biblioteką Gnome. Równie dobrze zamiast używać libmysqlclient można latać po gołych socketach - tylko po co? Jest biblioteka, trzeba jej używać a nie bawić się w niskopoziomowe zamienniki (na czym sam się niejednokrotnie przejechałem).


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#11  2012-01-11 20:00:24

  gindek - Zubr, bydle na etacie.

gindek
Zubr, bydle na etacie.
Skąd: Z puszczy.
Zarejestrowany: 2008-12-08

Re: Mysql + C połączenie

ethanak napisał(-a):

gindek napisał(-a):

rozwiazanie
funkcja z reallokacja buffora, jako parametr podaje sie ile bajtow ma byc dopisywane kazdorazowo.

Tak, tylko w glibie masz funkcje które to robią (konkretniej g_io_channel_read_line() i podobne) - po co wynajdywać ponownie koło?

Kod:

   gchar *ptr;
   gsize t;
   GIOChannel *inp=g_io_channel_unix_new(0);
   g_io_channel_read(inp,&ptr,NULL,NULL,NULL);
   ptr[t]=0; // zgadnij co to?
   printf("Wprowadziłeś '%s'\n",ptr);

Jakoś trochę krócej, nie?

z prostej przyczyny, ja biblioteki glib nie znam, a ty z całej swojej łaski nie raczyłeś podać rozwiązania i waliłej posty które nic konstruktywnego do tematu nie wnosily.
Gdyby Autor postu miał ochote uczyc sie glib zrobił by to, widać nie ma takiej ochoty a potrzebował kodu ( moze prosty projek na zalke z programowania ).

z reszta podpinanie glib i wykożystanie 1 funkcji ? ( ktora mozna zrobic samemu , jak widac nie jest to duzo pracy, inna sprawa jest że kod może kompilować na nie swojej maszynei , gdzie rownie dobrze może brakować nagłówków -dev do glib  ( np. na uczelni ) ),

sadze ze znalezienie tego gotowca na google zajelo mi mniej czasu niz tobie funkcji w dokumentacji glib,

musiało cie tez zdrowo zdenerwować ze łaskawie zebrałeś sie i sprawdziłeś w co to za funkcja,

a mozna było uniknac całej tej dziecinnej zabawy gydybś tylko podał ( mowie ze ty, bo Ja jak wspomniałem nie znam glib, a Autor widać nie chce sie uczyc) w pierwszej twoej wypowiedzi

"uzyj g_io_channel_read() z biblioteki glib ".

generalnie puste trollowe wypowiedzi powinny się znajdować tylko pod domeną onet.pl , proponuje tam wrócić.

to forum jest raczej do rozwiązywania problemów , a nie od ich wytwarzania.


" Wojny przychodzą i odchodzą, a moi żołnierze są wieczni"


"Zbuduj mały, dziarski router z udostępnionych przez prowadzącego części od Kamaza?"

Offline

 

#12  2012-01-16 12:06:37

  hello_world - Członek DUG

hello_world
Członek DUG
Skąd: Rymanów Zdrój
Zarejestrowany: 2010-06-03
Serwis

Re: Mysql + C połączenie

Dobra Panowie widzę, że mistzrami jesteście, postanowiłem zacząć przerabiać ten C.
Zacznijmy od tego że ja niedouczony gdzieś przeczytałem że dane pobiera się przez scanf();
Oczywiście pobiera się ale do pierwszej spacji wiec tak naprawdę mi nie przekazywało kompletnego polecenia.

Zacznę od małego programiku który będę starał sie rozbudowywać ale znowu stanąłem pod murem

Kod:

#include <stdio.h>

void napis(char fraza)
{
  printf("napisz coś\n");
  while ((fraza = getchar()) !='\n'){
  putchar(fraza);
  }
}
int main()
{
  char temp;
  napis(temp);
  return 0;
}

To działa, program zakańcza pobierać znaki po naciśnięciu enter
Teraz próbuję to przełożyć na programik z mysql i mam taki komunikat błędu przy kompilacji.

Kod:

baza.c: In function ‘main’:
baza.c:34:3: warning: passing argument 2 of ‘mysql_query’ makes pointer from integer without a cast [enabled by default]
/usr/include/mysql/mysql.h:450:14: note: expected ‘const char *’ but argument is of type ‘char’

A teraz podaję kod żródła.

Kod:

#include <stdio.h>
#include <mysql/mysql.h>


void napis(char fraza)
{
  printf("napisz coś\n");
    while ((fraza = getchar()) !='\n')
    {
    putchar(fraza);
    }
}

int main(int argc, char **argv)
{
  
  MYSQL *conn;
  conn = mysql_init(NULL);
  
  if (conn == NULL) 
  {
  printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
  }
  if(mysql_real_connect(conn, "localhost","root","haselko","testC",0,NULL,0)==NULL)
  {
  printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
  }
  mysql_query(conn, "drop table tabelaA;");
  mysql_query(conn, "create table tabelaA(imie varchar(25))");
 // printf("Podaj polecenie select do tabeli tabelaA\n");
  
  char zapytanie;
  napis(zapytanie);
  mysql_query(conn, zapytanie);
  mysql_close(conn);  
  
  return 0;
}

Offline

 

#13  2012-01-16 12:31:16

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Mysql + C połączenie

Błąd kompilacji wynika z tego, że masz:

Kod:

char zapytanie;

Powinno być na przykład:

Kod:

char zapytanie[ileśtam]
//albo
char *zapytanie=malloc(ileśtam)
//albo fafnaście innych możliwości

Ale to tylko błąd kompilacji... bo nawet jeśli to zmienisz to i tak się nie wykona.
Wybacz, ale najpierw poznaje się podstawy języka, dopiero później próbuje się w nim coś pisać.
A 'mały programik który będziesz rozbudowywać' świadczy o tym, że o C nie masz zielonego pojęcia i nie powinieneś nawet tego tykać przed przeczytaniem choćby pobieżnie podręcznika. Owszem, program działa, ale zupełnie inaczej niż sobie wyobrażasz.

Podręcznik leży tu: http://merlin.pl/Jezyk-Ansi-C_Brian-W-Kernighan-Den … 1,528831.html
Zgłosisz się po przeczytaniu.

Ewentualnym obrońcom przypominam, iż forum służy do rozwiązywania problemów, a nie do uczenia podstaw kogoś kto - jak wynika z owego spłodzonego przezeń potworniaka - odczuwa dziwną niechęć do korzystania z podręczników.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#14  2012-01-16 12:47:14

  hello_world - Członek DUG

hello_world
Członek DUG
Skąd: Rymanów Zdrój
Zarejestrowany: 2010-06-03
Serwis

Re: Mysql + C połączenie

@ethank
Powiem tak sp.. i nie denerwuj mnie, jak masz tylko dawać wpsiy nic nie wnoszące. H.. ci do tego czy sobie dopiero zaczynam i zamierzam rozbudowywać progrmaik. Nie masz nic sensownego do powiedzenia to się nie odzywaj.

Ale to tylko błąd kompilacji... bo nawet jeśli to zmienisz to i tak się nie wykona

To stwierdzenie się do demotywatorów się nadaje.

Ewentualnym obrońcom przypominam, iż forum służy do rozwiązywania problemów, a nie do uczenia podstaw kogoś kto - jak wynika z owego spłodzonego przezeń potworniaka - odczuwa dziwną niechęć do korzystania z podręczników.

Wow mamy nowego moderatora od działu programowanie.

Ostatnio edytowany przez hello_world (2012-01-16 12:49:24)

Offline

 

#15  2012-01-16 21:07:40

  gindek - Zubr, bydle na etacie.

gindek
Zubr, bydle na etacie.
Skąd: Z puszczy.
Zarejestrowany: 2008-12-08

Re: Mysql + C połączenie

char jest zmienna do zapisu znakow ( pojedynczych )
zeby zapisac ciag musisz miec tablice , albo zaalokowana pamiec ( jest tu pewna roznica, ale dla ciebie poki co nie istotna ).

Kod:

void napis(char fraza)
{
  printf("napisz coś\n");
  while ((fraza = getchar()) !='\n'){
  putchar(fraza);
  }

ta funkcja zapisuje tylko ostani znak, nie caly wpisany ciag znakow,
tz. ze jak wpiszesz

Kod:

asdf cycki szatana

to w "fraza" masz tylko litere
a

na ekranie widzisz inaczej bo od strzala masz wyswietlane znaki ktore wpisujesz , dlatego wydaje sie ze masz to zapisane gdzies w pamieci ( a tak nie jest ), musisz miec to albo w tablicy albo w pamieci ( jak wczesniej podalem ).

kolejna kwestia jest ze wartosc zapisana w zmiennej "fraza" bedzie aktualna tylko w niej :], tz bedzie istniala tylko w niej, po wyjsciu z funkcji zmienna jest niszczona, inaczej mowiac pamiec zajmowana przez zmienna jest zwracana do systemu, a tym samym to co bylo zapisane pod ta zmienna tez jest tracone.
Zeby zapisac to co wylo wykonane w funkcji, tak zeby bylo aktulane poza nia, musisz sie odwolac poprzez adres w pamieci.
Dla pojedynczych znakow mozna to zrobic przez referencje , robi to znak &.
Jednak dla tablic trzeba juz przez wskaźnik, znaczek * ( gwiazdka )
( prawde mowiac obie metody opieraja sie na tym samym, inaczej sie nazywaja )



tutaj przyklad

Kod:

void cycki_ktore_nie_robia_frazy(char fraza){
    fraza='a';
}

int main(){

    char fraza;
   fraza = 'b';
   cycki_ktore_nie_robia_frazy(fraza);
   printf("%c\n",fraza);

return 0;
}

da w wyniku
b
tutaj nazwa nie ma nic do rzeczy, poprostu to co jest wywolywane w funkcji jest kopią, czyli w momecie
cycki_ktore_nie_robia_frazy( fraza );
zmienna "fraz" zostala skopiowana i przekazana jako parametr funkcji, ( zawsze tak sie dzieje ).

zmieniajac cos przez wskaznik, kopiowany i przekazywany jest odres w pamieci przez ktory mozemy sie odwolac do danego miejsca w pamieci.

tutaj mozna powiedziec tak ze
wywolanie normalnie ze zmienna jest "skopiowanie drzwi do ktorych masz zapukac", mozesz te drzwi w funkcji butem skasowac, ale oryginalne w formie nie zmienionej masz zachowane.

wskaznik natomiast jest numerem na dzwiach w bloku, ( adresem zamieszkania ) typa ktoremu masz z butami wjechac do domu i burdel zrobic.
wiec mozemy zrobic tak

Kod:

void cycki_ktore_robia_fraze(char *fraza){  /// tutaj gwiazdka mowi ze funkcja ma sie spodziewac samego adresu, a nie stolarza z drzwiami na plecach.
    *fraza='a' ; 
/* tutaj gwiazdka informuje ze bedziemy operowac na zmiennej ktra jest w adresie zapisanym pod "fraza", czyli sama zmienna fraza nie posiada tutaj znaku tylko liczbe calkowita bedaca numerem bloku w pamieci gdzie znajduje sie zapisana zmienna. 
na tym etapie nie masz mozliwosci odwolac sie do zmiennej , ktora trzyma te literki , uzywaja samej nazwy , tz nie masz mozliwosci zeby sie odwolac poprzez 
nazwa_zmiennej = 'a';
*/
   
}

int main(){

   char fraza;
   fraza = 'b';
   cycki_ktore_robia_fraze(&fraza); // & - mowi "chce sam adres, do frazy, a nie jebana fraze
   printf("%c\n",fraza);

   /* tutaj mozesz sie odwolywac do tego co jest zapisane w zmiennej fraza , nie potrzebujesz gwiazdki :] , nazwy tego co masz w main i tego co jest w cycki_ktore_robia_fraze , nie maja tutaj nic do rzeczy */

return 0;
}

Kod:

void cycki_ktore_robia_fraze(char *baranek_balwanek){  
    *baranek_balwanek='a' ; 
}

int main(){

   char fraza;
   fraza = 'b';
   cycki_ktore_robia_fraze( &fraza); 
   printf("%c\n",fraza);


return 0;
}

ten kod da to samo w wyniku.

<><><><><><><><><><><><><><><><><><><><><><><><><><>

wracajac na poczatek

Kod:

  char *zapytanie;
  jakas_funkcja_do_pobierania_calego_ciagu(  zapytanie); // tutaj poprostu sie podaje wskaznik , czyli cos co bedzie numerem.
  mysql_query(conn, zapytanie);
  mysql_close(conn);

albo

Kod:

  char *zapytanie;
  zapytanie = jakas_funkcja_do_pobierania_calego_ciagu( ); // takie wywolanie bedzie dzialac jezeli funkcja ejst zdefiniowana jako " char * nazwa_funkcji();
  mysql_query(conn, zapytanie);
  mysql_close(conn)

albo

Kod:

  char *zapytanie = (char* ) malloc( 80 * sizeof( char ) ); // podajac wartosc zmiesci sie tylko 80 znakow, czy tam ile sobie zdeklarujesz ;
  gets( zapytanie); 
  mysql_query(conn, zapytanie);

  for ( int i = 0 ; *(zapytanie + i ) ; i++)
      printf("%c", *(zapytanie + i ) );    // nie wiem czy to kazdy kompilator przyjmnie, bylo nie bylo, ten for wyswietla na monitor zapytanie

 printf("\n");
 free( zapytanie ) ; // wazna rzecz, zawsze kiedy sie uzyje malloc() trzeba pamietac zeby pamiec zwolnic / oddac do systemu przed opuszczeniem programu

Ostatnio edytowany przez gindek (2012-01-16 21:32:29)


" Wojny przychodzą i odchodzą, a moi żołnierze są wieczni"


"Zbuduj mały, dziarski router z udostępnionych przez prowadzącego części od Kamaza?"

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)