[C/C++]Przypisywanie wartosci do zmiennej typu char


(E Mr Koka) #1

Za nic niemoge przypisać do zmiennej typu char jakiegoś textu :confused: mam np cos takiego:

char c[100];

c='costam';

No ale niedziala, i tak samo przy deklaracji zmiennej:

char c[100]='costam';

ale moge przypisac jej wartosc za pomoca funkcji:

scanf("%s",&c);

Jestem początkujący wiec niewiem nawet czy dobrze mowie, ze tamto to deklaracja a to to funkcja :smiley:

Wlasnie sie dowiedzialem ze char[100] to tablica znaków ;] , jest jakas inna zmienna do przechowywania textu ?


(Sanctuarius) #2

powinienes przypisac:

char c[100];

c="costam";


(Sawyer47) #3

Biblioteczna klasa string

Załączasz ją:

#include

(Marduk666pl) #4

Sanct, brednie gadasz. Po co wprowadzasz ludzi w błąd.

Poprawna deklaracja i zarazem definicja brzmi:

char c[100]="costam";

Tylko tutaj można przypisać wartość w taki sposób, później nie jest już to możliwe i trza użyć poniższej funkcji.

Jeżeli chcesz przypisać łańcuchowi znaków inną wartość niż na początku to musisz użyć funkcji strcpy, która pobiera 2 parametry - wskaźnik do zmiennej gdzie zapisać tekst, oraz wskaźnik do źródła z którego ma pobrać tekst.

Np.

char tekst[100];

strcpy(tekst, "jakisnowytekst");


(E Mr Koka) #5

Dzięki marduk666 wszystko działa tylko powiedz mi jeszcze jak morzna dodać do siebie 2 zmienne typu char. A "stringi" mi niestety niedziałają :confused:

test3.cpp In function `int main()':

10 test3.cpp `string' undeclared (first use this function)

(Each undeclared identifier is reported only once for each function it appears in.)

10 \test3.cpp expected `;' before "a"

a oto kod(zik):

#include 

#include 

#include 

#include 

#include 



int main()

{

    string a,b;


    getch();

    return 0;

}

EDIT: Juz znalazlem funkcje ktura dodaje do siebie ciagi znakow: strcat.

Interesuje mnie tylko opis jak urzywać zmiennej typu string.


(Sanctuarius) #6

marduk666 faktycznie sory :wink: poprostu juz dlugo nie uzywam tablic do zapisywania ciągu znakow;) wiec pomyslic sie nie trudno :slight_smile: ale przy wskazniku takie cos dziala:) jeszcze raz sory:)


(Ryan) #7

Poczytaj o strcpy i strcat albo odpowiednikach z biblioteki safe string. Ewentualnie użyj wrappera tak jak polecili poprzednicy.


(E Mr Koka) #8

Znalazłem rozwiązanie , po wpisaniu using namespace std; stringi działają tylko niemoge ich wypisać poprzez printf i chyba tu chodzi o to ze nieweim co wpisac, probowalem %s ale sa bledy i wywala program.


(Ryan) #9
std::string slowo = "blablabla";

printf("%s", slowo.c_str());

string to nie char* - poczytaj o różnicach, bo warto rozumieć dlaczego Ci się program wywala.


(E Mr Koka) #10

OK wszystko działa :slight_smile: Bardzo dziękuje za wszystkie odpowiedzi :slight_smile:

Mam jeszcze jedno pytanko, jak przypisać zmiennej typu string, ciąg który zawiera spacje ? bo ja zeby cokolwiek wpisac robie tak:

scanf("%s",e.c_str()) ;

i gy wpisze np. "ala ma kota" to zostaje z tego tylko "ala", a kot gdzie ?


(Bartlomiej Kwiatkowski) #11

Na przykład tak jak tutaj (example).


(Ryan) #12

Poza tym problem już był poruszany. :slight_smile:

http://forum.dobreprogramy.pl/viewtopic.php?t=145833

Jedyne o czym warto pamiętać, to że getline jest metodą strumieni, których NIE POWINNO się mieszać z funkcjami z stdio. W akcie desperacji :wink: możesz użyć gets

http://www.cplusplus.com/reference/clib ... /gets.html

ale są z kolei dziesiątki powodów dlaczego gets nie powinno się używać (z przepełnieniem bufora na czele).