Wpis z mikrobloga

#programowanie #c++ #pytanie

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);
}
  • 14
@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ł?
u mnie na gcc 5.4.1 wypisuje tylko |+CSQ|


@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.