Kód: Vybrat vše
//printf("TDSver:%d Prog:\"%s\"\n\r",ver,msg);
printf("TDSver:%d ",ver);
printf("Prog:\"%s\"\n\r",msg);
Když ho rozdělím do 2 a 3 tak to funguje.
Moderátor: Moderátoři
Kód: Vybrat vše
//printf("TDSver:%d Prog:\"%s\"\n\r",ver,msg);
printf("TDSver:%d ",ver);
printf("Prog:\"%s\"\n\r",msg);
Kód: Vybrat vše
printf("TDSver:%d Prog:\"%s\"\r\n",(int)ver,(const char *)msg);
Kód: Vybrat vše
int temp;
memcpy(&temp, &ver, sizeof(int));
printf("TDSver:%d Prog:\"%s\"\r\n", temp, msg);
Těžko říct. Ono záleží na tom, jak je definováno to ver. Moje hypotéza je, že by mohlo nastat to, že ver není typu int, ale třeba long, nevím. Pak by rozdělení na dva příkazy fungovalo, protože printf by si vzal jen část, což nevadí. Ale při obou hodnotách v jednom příkazu by se místo druhé hodnoty přečetl nějaký nesmysl, což by mohlo způsobit chybu, protože je to ukazatel. A tohle ten printf sám právě asi moc nevyřeší, protože to %d se zpracovává až při běhu programu, zatímco konverzi parametrů je třeba dělat během překladu. Je ale taky možné, že je tam špatně něco jiného, pak by tohle asi nepomohlo, ale zatím mi to přijde nejpravděpodobnější.mtajovsky píše:(int)ver nepomůže, protože to si dělá printf() implicitně sama.