Portál AbcLinuxu, 9. května 2025 21:43
#include <stdio.h> char *string_hexnum(int number) { char mask[] = "0123456789ABCDEF"; char str[12]; int i = 10; str[11] = '\0'; if (number < 0){ puts("ERROR: number is negative\n"); return 0; } if (number == 0){ str[i--] = '0'; } else { while (number != 0){ str[i--] = mask[number % 16]; number /= 16; } } str[i--] = 'x'; str[i] = '0'; return str+i; } void print_hexnum(int number) { char* pnt; puts("test"); pnt = string_hexnum(number); puts(pnt); puts("test"); } int main(void) { print_hexnum(888); return 0; }Problemom je, ze sa to cislo nevypise, zostane prazdny riadok. Nechcem na to pouzit ziadnu funkciu z kniznice. Ked som to debuggoval, tak som videl, ze do pamete sa vsetko uklada ako ma.
pnt
ukazuje na prvy znak retazca - '0'.
Dakujem.
Řešení dotazu:
Chyba je v tom, ze vracite odkaz na lokalni promennou str. Bud pouzijte malloc/free, anebo zmente deklaraci char str[12] na static char str[12]. Pak to ovsem nebude fungovat v multithread programech, ale to, tusim, ani nechcete :)
return str+i;Nemůžete vracet ukazatel na lokální proměnnou - jakékoliv další volání funkce zásobník přepíše. V lepším případě to nebude fungovat, v horším případě to upadne.
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { unsigned long iCislo; if (argc > 1) { iCislo = atoi(argv[1]); printf("Cislo %s je hexa: 0x%X\n", argv[1], iCislo); return(0); } printf("Malo parametru!\n"); return(1); }
Nevim, jestli je 2x rozumne pouzit %X na 'unsigned long'.
printf("%lx\n", atol(argv[1])); ^ ^A
return
není funkce.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.