[C++, WinAPI] Konkatenacja dwóch tekstów
Ostatnio zmodyfikowano 2012-12-05 10:38
berkov Temat założony przez niniejszego użytkownika |
[C++, WinAPI] Konkatenacja dwóch tekstów » 2012-12-04 19:36:18 Hey ho Niby prosta czynnos bo w VB np wystarczy uzyc & ... a tu sprawia niezly bol glowy. Chodzi o konkatenacje Stram sie dwa stringi polaczyc... bezskutecznie! po wykonaniu kodu: LPSTR a = "aaa"; LPSTR b = "bbb"; LPSTR Wyn = NULL; Wyn = lstrcat( a, b ); MessageBox( hwnd, Wyn, "Wow.", MB_ICONINFORMATION ); Wyn jest pusty. troche poszperalem i zauwazylem ze po wykonaniu: LPSTR a =( LPSTR ) GlobalAlloc( GPTR, 100 ); if( a == NULL ) MessageBox( NULL, "Błąd alokacji", "DUPA", MB_ICONSTOP );
LPSTR b = "bbb"; LPSTR Wyn = NULL; Wyn = lstrcat( a, b ); zarowno a jak i Wyn sa rowne b!!!??? ale wystarczy ze tutaj przed wywolaniem lstrcat nadam a jakas wartosc (np "aaa") i ponownie Wyn jest pusty a a = "aaa". nie rozumiem tej funkcji. Pyt 1. Czy ktos moze wytlumaczyc czemu top nei dziala? Pyt 2. Czy LPSTR to poprostu pointer na string? innymi slowy LPSTR x jest wlasciwie rownoznaczne z np string * x albo char * x[]? |
|
Mrovqa |
» 2012-12-04 19:39:19 Popatrz w nagłówki albo poszukaj w google'u. To na prawdę nie jest aż tak trudne. Serio. #define LPSTR char* |
|
berkov Temat założony przez niniejszego użytkownika |
» 2012-12-04 19:46:44 Dzieki Mrowka - nie pomogles!
LPSTR w zordlach szukalem i chodz teoretycznie wiem co to jest to nie rozumiem po co ktos by to definiowal jeszcze raz. Whatever...
dlaej nie wiem jak polaczyc dwa stringi.
|
|
pekfos |
» 2012-12-04 20:02:07 |
|
berkov Temat założony przez niniejszego użytkownika |
» 2012-12-04 20:36:24 Ja to naprawde probowalem na wiele sposobow i wiele czytalem. Dziala jesli "a" jest zdeklarowane jako np char * [100]. ale nie dziala jesli jest to LPSTR dynamicznie zaalokowane o dlugosci 100 (na pewno miejsca nie brakuje!)! stad tez pojawilo sie wczesniejsze moje pyt 2. czy jest jakas roznica w uzyciu miedzy char * x[] oraz LPSTR x! bo jesli nie ma to czemu to nie dziala!? to powinno dzialac a na ekranie zamiast "aaabbb" dostaje "aaa"!!! LPSTR a =( LPSTR ) GlobalAlloc( GPTR, 100 ); if( a == NULL ) MessageBox( NULL, "Błąd alokacji", "DUPA", MB_ICONSTOP );
a = "aaa\0"; LPSTR b = "bbb";
lstrcat( a, b ); MessageBox( hwnd, a, "Wow.", MB_ICONINFORMATION ); |
|
krzyk |
» 2012-12-04 21:07:10
To jest alokacja pamięci,czyli "anulowałeś" GlobalAlloc zamiast wypełnić.
|
|
Admixior |
» 2012-12-04 21:54:09 Uno: zdefiniuj sobie tablice lokalnie lub globalnie i albo ją zainicjalizuj np: char tab[20]="abc";(pamiętając że nie może wtedy być tekst dłuższy od 20-1=19 znaków (ostatni to null). Jak nie znasz długości użyj addr=new char[x]; zamiast GlobalAlloc() a później do zwalniania delete[] addr; //używając new jesteś zmuszony do użycia strcopy lub podobnej funkcji.
Duo: char* ab="abc"; // cudzysłów zwraca wartość const char* więc nie możesz jej edytować bo inaczej skraszuje progs, a po za tym nie zarezerwowałeś miejsca dla następny elementów... |
|
Mrovqa |
» 2012-12-04 21:55:41 czy jest jakas roznica w uzyciu miedzy char * x[] oraz LPSTR x! |
Eh... było to już napisane. char*[] == char** LPSTR == char* |
|
« 1 » 2 |