Альтернатива strcpy в C++
В C я использовал strcpy
сделать глубокая копия строки, но это все еще 'хорошо' использовать strcpy
в C++ или есть лучшие альтернативы, которые я должен использовать вместо этого ?
4 ответов
в C++ Самый простой способ-обычно использовать класс std:: string вместо char*.
#include <string>
...
std::string a = "Hello.";
std::string b;
b = a;
строка "b = a;" делает то же самое, что вы обычно делаете с strcpy.
Я поместил это в комментарий выше, но просто чтобы сделать код читаемым:
std::string a = "Hello.";
std::string b;
b = a.c_str(); // makes an actual copy of the string
b = a; // makes a copy of the pointer and increments the reference count
если вы действительно хотите имитировать поведение strcpy
, вам необходимо скопировать его с помощью c_str()
;
обновление
следует отметить, что стандарт C++11 явно запрещает общий шаблон копирования при записи, который использовался во многих реализациях std::string
ранее. Таким образом, строки подсчета ссылок больше не разрешены, и следующее будет создайте копию:
std::string a = "Hello.";
std::string b;
b = a; // C++11 forces this to be a copy as well
Если вы используете строки c++, просто используйте конструктор копирования:
std::string string_copy(original_string);
оператор присваивания
string_copy = original_string
Если вы должны использовать строки c-стиля (т. е. массивы символов с нулевым завершением), то да, просто используйте strcpy или в качестве более безопасной альтернативы strncpy.
вам предлагается использовать strcpy_s, потому что в дополнение к аргументам назначения и источника он имеет дополнительный аргумент для размера буфера назначения, чтобы избежать переполнения. Но это, вероятно, самый быстрый способ скопировать строку, если вы используете массивы/указатели символов.
пример:
char *srcString = "abcd";
char destString[256];
strcpy_s(destString, 256, srcString);