Witam!
Przepraszam, że zadręczam Was kolejnym problemem z natury banalnych, ale jakoś tego obejść, a i wujek Google mi nie pomógł. Mianowicie potrzebuje przeczytać char* znak po znaku, czyli coś na wzór funkcji getc(FILE* ) tylko że dla łańcuchów. Jak to zrobić? Pozdrawiam!
char *znaki="ala ma kota";
for(char *i=znaki;*i;++i) cout<<" '"<<*i<<"'";
// lub
for(int i=0;znaki[i];++i) cout<<" '"<<znaki[i]<<"'";
Witam!
Dzięki Wielkie za pomoc!
Nie chce zaśmiecać forum dlatego nie będę zakładał nowego wątku, tylko zapytam się tutaj:
Mam sytuację w której muszę dopisać znak do ciągu znaków char*
próbowałem:
strcat(ciag,&znak)
ale dopisuje mi jakieś bzdury. Jak to powinienem napisać?
przede wszystkim musisz zarezerwować wcześniej większą tablicę znaków, tak żeby zmieścił się znak i NULL.
Po drugie po co Ci ten ampersand?
po prostu strcat(ciag, znak), bo definicja jest strcat(char , const char)
@up - nieprawda...
@Maleficus - ja bym to zrobił np. tak:
char tmp[2];
tmp[0] = znak;
tmp[1] = 0;
strcat(ciag, tmp);
Opiera się to na tym że strcat wymaga podania tekstu jako drugiego parametu - a tekst w C to nic innego niż ciąg znaków (liczb) zakończonych zerem.
PS. sprytniej by było int tmp = znak; strcat(ciag, &tmp);
ale to niekoniecznie musi (wszędzie) działać, a osobiście bym zabił kogoś kto taki kod pisze ;)
int kon = 0;
char c;
char* rozkaz = "\n";
char tmp[2];
tmp[1] = 0;
for(int i=0;pole[i];++i)
{
c=pole[i];
i++;
tmp[0] = c;
strcat(rozkaz,tmp);
}
if (rozkaz == "READ") kon = 1;
if (rozkaz == "WRITE")kon = 2;
w linijce z strcat wyrzuca mi
An unhandled exception of type 'System.AccessViolationException' occurred in sample.exe
Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
ale błędu nie widzę. Wie ktoś o co chodzi?
Problem akurat nie jest z tmp tylko z ciągiem znaków... strcat to nie cudotwórca, tak naprawdę jest bardzo prosty 'pod maską'.
Nie dość że wcześniej MJaay o tym pisał to jeszcze... manual: (http://www.cplusplus.com/reference/clibrary/cstring/strcat/)
destination
Pointer to the destination array, which should contain a C string, and be large enough to contain the concatenated resulting string.
Inaczej mówiąc, twój strcat pisze za końcem łańcucha i nadpisuje inne wartości na stosie.