Portál AbcLinuxu, 18. listopadu 2025 06:28
#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.