Portál AbcLinuxu, 9. května 2025 21:41
#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char *test = "x^3 + (-x)^5"; /*char *test = "sin(123 + 45 * ln(27 - 6))";*/ char *str = malloc(strlen(test) * sizeof(char)); strncpy(str, test, strlen(test)); printf("%s\n",str); }Čekal bych, že na výstupu bude:
x^3 + (-x)^5
ale já dostanu:
x^3 + (-x)^5\031
Zvláštní je, že s jiným řetězcem (např. tím zakomentovaným to funguje).
Můj dotaz je – je bug u mě, nebo jinde?
Řešení dotazu:
sizeof(test)
vráti veľkosť dátového typu "smerník".
protože sizeof(test) vrátí délku celého poleJenže zde jde o pointer! Velikost celého pole může sizeof vrátit pouze pokud jde o pole v době deklarace. Prostě:
int a[10]; int *pa = a; // sizeof(a) = 10*sizeof(int) != sizeof(pa) = sizeof(void *)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.