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 »  |