phpion.com Napisano Styczeń 8, 2006 Zgłoś Share Napisano Styczeń 8, 2006 Witam!Spotkalem sie z kolejnym problemem. Otoz, jak zrobic cos takiego. Uzytkownik podczas pracy z programem wpisuje kolejne zapytania SQL ktore chce wykonac. Zapytania te chcialbym zapisywac do tablicy; calosc by wygladala np. tak:KODtab[0] = "SELECT * FROM tabela";tab[1] = "DELETE * FROM tabela";czyli pamietalbym np. 5 ostatnio wykonanych zapytan. I teraz moje pytanie: jak zapamietac w tablicy w C stringi? Napisalem cos takiego (dla testow wczytywania):KOD#include <stdio.h>main(){ char tab[3], temp; int i; for (i=0; i<3; i++) { scanf("%s", temp); printf("%s", temp); tab[i] = temp; } printf("n"); for (i=0; i<3; i++) { printf("%sn", tab[i]); } getchar(); return 0;}ale to nie za bardzo dziala... wywala Segmentation fault. Link do komentarza Udostępnij na innych stronach More sharing options...
wachu Napisano Styczeń 8, 2006 Zgłoś Share Napisano Styczeń 8, 2006 Po pierwsze zle chcesz przechowywac stringi: char to tylko 1 znak.Mozesz zrobic tak np. #define MAX_BUFF 128...char tab[5][MAX_BUFF]; // bo chciales miec zapamietywane 5 ostatnichteraz mozesz:sprintf("%s", &tab[i]);a i jeszcze jedno, stringi nie przypisuje sie za pomoca operatora: =do tego sluzy odpowiedia funkcja: strcpy(), wiecej w MSDN/Google.Zaraz posypie sie jeszcze wiecej pytan jesli nie poduczysz sie C, a tego admini moga juz nie wytrzymac Link do komentarza Udostępnij na innych stronach More sharing options...
Iskar Napisano Styczeń 8, 2006 Zgłoś Share Napisano Styczeń 8, 2006 Polecam zaznajomić się z jakimś podstawowym kursem C. Poza tym obowiązują przedrostki np. [C], [C++], więc je stosuj, ten temat też popraw. Link do komentarza Udostępnij na innych stronach More sharing options...
phpion.com Napisano Styczeń 8, 2006 Autor Zgłoś Share Napisano Styczeń 8, 2006 Wachu - cos nie tak z twoim przykladem, albo z moim:KODchar pamiec[5][255]; int i; for (i=0; i<5; i++) sprintf("%s", &pamiec[i]); printf("n"); for (i=0; i<5; i++) printf("%sn", pamiec[i]);wywala:KODtest.c: In function `main':test.c:13: warning: passing arg 2 of `sprintf' from incompatible pointer typeGdy dane wczytam przez scanf to do tablicy wchodza nie cale wersy zapytan ale jakby pojedyncze slowa :/ Dlaczego to C jest takie glupie?!// nie męcz sie z C tylko przejdź na C++ - Iskar Link do komentarza Udostępnij na innych stronach More sharing options...
wachu Napisano Styczeń 8, 2006 Zgłoś Share Napisano Styczeń 8, 2006 pomylilo mi sie, oczywiscie chodzilo o scanf(); a jesli chcesz wc zytywanie calych lini razem ze spacjami to polecam: gets(); w MSDN znajdziesz wiecej podobnych funkcji.Btw. C++ tez nie rozwiazuje tych problemow jesli nie zna sie odpowiednich funkcji, wiec problem lezy raczej w niewiedzy niz w kulawosci jezyka Link do komentarza Udostępnij na innych stronach More sharing options...
jaro3000 Napisano Styczeń 12, 2006 Zgłoś Share Napisano Styczeń 12, 2006 [code=C++] #define MAX_BUFF 128 (...) char tab[5][MAX_BUFF]; (...) [ [XWJNB&((<,+ĘJ\"zć}~Z0<ł73j7+ZŚĆŁzsu%j0jvjh'ś0ĘfĄĄz'3'ł<ŹśJ#yb<'Fw8'&-z .Ę0yo)r$4(5a} U4(M5a} Upp4)ĄŃm][MAX_BUFF]; scanf(\"%\"S_MAX_BUFF\"s\", &tab[i]); [/code] Link do komentarza Udostępnij na innych stronach More sharing options...
Bolek Napisano Styczeń 13, 2006 Zgłoś Share Napisano Styczeń 13, 2006 [quote] [code=C++] #define MAX_BUFF 128 (...) char tab[5][MAX_BUFF]; (...) [ [XWJNB&((<,+ĘJ\"zć}~Z0<ł73j7+ZŚĆŁzsu%j0jvjh'ś0ĘfĄĄz'3'ł<ŹśJ#yb<'Fw8'&-z .Ę0yo)r$4(5a} U4(M5a} Upp4)ĄŃm][MAX_BUFF]; scanf(\"%\"S_MAX_BUFF\"s\", &tab[i]); [/code] [/quote]jaro twoj kod tez teoretycznie moze zrobic wszystko Calkowicie bezpiecznie to powinno byc tak:KOD#define MAX_BUFF 128#define SMAX_BUFF "128"char tab[5][MAX_BUFF];scanf("%"S_MAX_BUFF"s", &tab[i]);tab[i][MAX_BUFF-1] = '0';Bo jak ktos przekroczy rozmiar bufora to i tak na koncu nie bedziesz mial a wiec pierwsa lepsza operaca na tym stringu sie sypnie. Link do komentarza Udostępnij na innych stronach More sharing options...
jaro3000 Napisano Styczeń 13, 2006 Zgłoś Share Napisano Styczeń 13, 2006 naturalnie masz racje - mój błąd. Link do komentarza Udostępnij na innych stronach More sharing options...
sm00f Napisano Marzec 8, 2009 Zgłoś Share Napisano Marzec 8, 2009 [quote name='Bolek' post='1110' date='pią, 13 sty 2006 - 11:17']jaro twoj kod tez teoretycznie moze zrobic wszystko Calkowicie bezpiecznie to powinno byc tak: [code=C++] #define MAX_BUFF 128 #define SMAX_BUFF "128" char tab[5][MAX_BUFF]; scanf("%"S_MAX_BUFF"s", &tab[i]); tab[i][MAX_BUFF-1] = '0';$#jI-Ęk+Ąć+j\"'jJ'ry'Źhyv)ęą^ŚiĆjŚŹ2Śxękj^O #j)Ź$j$jezo7n^ZĆŚjŚjH)Ż7')]XWVÓPVQLWHH N N [/code]Polecam przeanalizowanie powyższego fragmentu Twojego kodu i pozdrawiam. Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Marzec 8, 2009 Zgłoś Share Napisano Marzec 8, 2009 Trochę lat minęło.. Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.