LINUX.ORG.RU

История изменений

Исправление KennyMinigun, (текущая версия) :

size_t get_and_return_string(char **out);

char *str = NULL;
size_t sz = get_and_return_string(&str);

И что потом делать со строкой? free? А вдруг она статическая? А если статическая и дёрнуть get_and_return_string еще раз — str вдруг поменяется.

Да, но это сколько мороки на ровном месте. А ведь с использванием stl это как «два байта об асфальт»:

// in-place
std::string& getAndReturnString(std::string &str);

// copy
std::string getAndReturnString(const std::string &str);

// и вообще: задача была только вернуть строку
std::string mkstring();

И тут же получаем умный контейнер «искаропки», а на С для «образумливания» наверняка бы структура понадобилась. Да и с выделением памяти морока.

Исправление KennyMinigun, :

size_t get_and_return_string(char **out);

char *str = NULL;
size_t sz = get_and_return_string(&str);

И что потом делать со строкой? free? А вдруг она статическая? А если статическая и дёрнуть get_and_return_string еще раз — str вдруг поменяется.

Да, но это сколько мороки на ровном месте. А ведь с использванием stl это как «два байта об асфальт»:

// in-place
std::string& getAndReturnString(std::string &str);

// copy
std::string getAndReturnString(const std::string &str);

// и вообще: задача была только вернуть строку
std::string mkstring();

И тут же получаем умный контейнер с плюшками типа .size() «искаропки», а на С для этого бы структура понадобилась. Да и с выделением памяти морока.

Исходная версия KennyMinigun, :

size_t get_and_return_string(char **out);

char *str = NULL;
size_t sz = get_and_return_string(&str);

И что потом делать со строкой? free? А вдруг она статическая? А если статическая и дёрнуть get_and_return_string еще раз — str вдруг поменяется.

Да, но это сколько мороки на ровном месте. А ведь с использванием stl это как «два байта об асфальт»:

// in-place
std::string& getAndReturnString(std::string &str);

// copy
std::string getAndReturnString(const std::string &str);

// и вообще: задача была только вернуть строку
std::string mkstring();

И тут же получаем умный контейнер с плюшками типа .size() «искаропки», а на С для этого бы структура понадобилась. Да и с выделением памяти морока.