Bezpieczne zwracanie const char* przez funkcję
Ostatnio zmodyfikowano 2009-06-06 13:01
DejaVu Temat założony przez niniejszego użytkownika |
Bezpieczne zwracanie const char* przez funkcję » 2009-06-06 01:10:25 Mamy przykładowo taki kod: const char * mieszadlo( const char * sInput ) { std::string sOutput = "Wymieszalem: "; sOutput += sInput; return sOutput.c_str(); } Pytanie brzmi następująco: 1) Czy jest to bezpieczne? 2) Jeśli nie - jakie jest alternatywne rozwiązanie? |
|
DejaVu Temat założony przez niniejszego użytkownika |
» 2009-06-06 11:57:53 static nie zda egzaminu w multithreading'u :) |
|
DejaVu Temat założony przez niniejszego użytkownika |
» 2009-06-06 14:14:38 Nie nie nie ;p w pisanie w stylu C to ja nie mam zamiaru się bawić :P Zresztą to było maksymalne uproszczenie tego co chciałem osiągnąć. Generalnie stwierdziłem, że najlepiej będzie zwracać std::string'a i z niego wyciągnąć sobie c_str(). W każdym razie dzięki za Twoje uwagi. Sekcję krytyczną też rozważałem, jednak nie ma sensu używać armaty do takiego problemu. W każdym razie dzięki za Twoje uwagi. Myślałem, że wymyślisz (lub znasz) coś więcej niż to co zaproponowałeś dlatego też założyłem ten temat :) /edit: Rozwiązanie jakie zastosowałem: string mieszadlo( const char * input ) { string output = "bleble "; output += input; return output; } |
|
manfred |
» 2009-06-06 10:23:49 No oczywiście, że nie jest bezpieczne - robisz string na stosie, robisz coś z nim, zwracasz go jako cstring i nagle przestaje istnieć. Najprościej zrobić z tego zmienną statyczną: const char * mieszadlo( const char * input ) { static string output; output = "Wymieszalem: " + input; return output.c_str(); } |
|
manfred |
» 2009-06-06 13:01:03 Sekcje krytyczne? Muteksy? Semafory? A zresztą, zrób to jak normalni ludzie (jak już musisz cstringi): void mieszadlo( char * out, size_t cch, const char * in ) { const char txt[] = "Wymieszalem: "; strncpy( out, txt, cch ); strncat( out, in, cch - sizeof( txt ) ); } Swoją drogą, myślałem, że koleś, który wymyślił notację węgierską został zjedzony przez jakieś plemię, którego szaman nie mógł zrozumieć, jak można w taki po...rypany sposób nazywać zmienne. |
|
« 1 » |