Mirki mam następujący kod http://cpp.sh/8yebr i na wyjściu dostaje "|+CSQ|" i wszystko fajnie. A po kompilacji w gcc pod linuxem dostaje "|+CSQ??Z????|". Jak mniemam tablica powinna być ładnie wyczyszczona a tu takie kwiatki.
int main() { char in[] = "+CSQ: 9,8\r"; char out[20];
unsigned char x = 0; unsigned char y = 4; //wyczyszczenie wyjsciowej memset(out, '\0', sizeof(out)); //kopiowanie z in do out od indeksu x do y memcpy(out, in + x, (y - x) * sizeof(*in));
@defoxe: wszystko się robi tak jak chcesz - tablica out ma 20 elementów śmieci. funkcją memcpy kopiujesz 4 (bo y-x=4) elementy na początek tablic out. czyli masz 4 elementy z tablicy in i 16 elementów-śmieci. skoro nie ma \0 to skąd printf ma wiedziec, że string się skończył?
@MamCieNaHita: @wytrzzeszcz: ok, coś możliwe że mam popyrtolone w przekazywaniu parametrów do funkcji. Dokładnie ten przykład co podałem http://cpp.sh/8yebr to obcięta wersja tego co mam. Działa i w kompilatorze online i w gcc. Natomiast problem jest w "pełnej wersji kodu". W gcc nie działa tak jak bym się spodziewał a online jest ok. Zobaczcie: http://cpp.sh/8afdr zwraca pięknie "|CSQ|" a w konsoli pierdoły "|CSQKu?|"
@MamCieNaHita: Ten przykład faktycznie działa, błędnie przyjąłem, że to coś na etapie kopiowania i powyciągałem to z funkcji... Problem chyba mam przy przekazywaniu zmiennych do funkcji.
Mirki mam następujący kod http://cpp.sh/8yebr i na wyjściu dostaje "|+CSQ|" i wszystko fajnie.
A po kompilacji w gcc pod linuxem dostaje "|+CSQ??Z????|". Jak mniemam tablica powinna
być ładnie wyczyszczona a tu takie kwiatki.
#include
#include
#include
#include
int main()
{
char in[] = "+CSQ: 9,8\r";
char out[20];
unsigned char x = 0;
unsigned char y = 4;
//wyczyszczenie wyjsciowej
memset(out, '\0', sizeof(out));
//kopiowanie z in do out od indeksu x do y
memcpy(out, in + x, (y - x) * sizeof(*in));
printf("|%s|",out);
}
@MamCieNaHita: memset(out, '\0', sizeof(out));
|+CSQ|a jak dasz po prostu 0 zamiast '\0' w memset?
Dokładnie ten przykład co podałem http://cpp.sh/8yebr to obcięta wersja tego co mam.
Działa i w kompilatorze online i w gcc.
Natomiast problem jest w "pełnej wersji kodu".
W gcc nie działa tak jak bym się spodziewał a online jest ok.
Zobaczcie: http://cpp.sh/8afdr zwraca pięknie "|CSQ|" a w konsoli pierdoły "|CSQKu?|"
@mudzo: Robiłem tak na początku, bez zmian.
this. sizeof zwróci rozmiar wskaźnika, a nie tablicy.
EDIT: rozmiar chara, a nie wskaźnika
@MamCieNaHita: Ten przykład faktycznie działa, błędnie przyjąłem, że to coś na etapie kopiowania i powyciągałem to z funkcji... Problem chyba mam przy przekazywaniu zmiennych do funkcji.
@MamCieNaHita: Ok. Teraz zwraca dobrze ale gdy zmienimy na
unsigned char x = 0;
unsigned char y = 4;
znowu "krzaczy"