Następujący kod działa inaczej na 64-bitowym i 32-bitowym, co powoduje problemy z przeniesieniem kodu.strtok na maszynach 64-bitowych
char * tmp = "How are you?";
printf("size of char * = %ld and size of strtok return val = %ld \n",sizeof(char *),sizeof(strtok(tmp," ")));
Poniżej znajduje się wyjście:
32 bit:
size of char * = 4 and size of strtok return val = 4
64 bit:
size of char * = 8 and size of strtok return val = 4
Strona człowiekiem strtok mówi:
#include <string.h>
char *strtok(char *str, const char *delim);
RETURN VALUE
The strtok() and strtok_r() functions return a pointer to the next token, or NULL if there are no more tokens.
char * na maszynie 64 bitowej ma być 8 bajtów jako wydrukowany. Dlaczego więc strtok zwraca 4-bitowy wskaźnik char na maszynie 64-bitowej?
Dzięki
Którego kompilatora używasz do uzyskania tych wyników? – Joel
Zapomniałeś dołączyć ''? Wtedy kompilator może być w tradycyjnym nastroju i przyjmie typ zwracający 'int' dla funkcji, których nie zna. –
Potwierdzono na 'gcc-4.5.real (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2'. Zwariowany. – sarnold