Можно ли добавить текст в char*
?Добавление текста в char *
Поскольку этот код дает ошибки:
name3 = "SELECT account_id FROM players WHERE name = '" + name + "'";
(name3 = а символ *)
Можно ли добавить текст в char*
?Добавление текста в char *
Поскольку этот код дает ошибки:
name3 = "SELECT account_id FROM players WHERE name = '" + name + "'";
(name3 = а символ *)
Ваш вопрос с меткой C++, поэтому использовать C++. Избавьтесь от char*
-х и использовать std::string
:
std::string name = "...";
std::string name3 = "SELECT account_id FROM players WHERE name = '" + name + "'";
Вы можете „добавить“ два массива символов (символ * s), выделяя новый массив, достаточно большой, чтобы держать как и скопировать обе строки в новый массив. Я думаю, вы согласитесь, что std::string
проще, но он также предоставляет меньше возможностей для ввода тонких ошибок в ваш код, что делает отладку и обслуживание проще в будущем.
В качестве побочного элемента, если вы планируете делать много конкатенации строк, вы должны использовать 'std :: stringstream'. Кроме того, воздержитесь от использования встроенного SQL, если сможете. –
Вы должны выделить память первого, например:
char* name = new char[ BUFF_SIZE ];
, а затем использовать strcpy
и strcat
, но .. у вас есть тег c++
. Используйте std::string
std::string name3 = "SELECT account_id FROM players WHERE name = '"
+
std::string(name)
+
"'";
или
std::string name3 = "SELECT account_id FROM players WHERE name = '";
name3 += name;
name3 += "'"; // or name3.push_back(';');
Примечание если name
не const char*
, но std::string
, вам не нужно от явных преобразований, поэтому обратитесь к meagar Начать
'std :: string' умнее этого. В лучшем случае вам нужна 'std :: string (name)', другие явные объявления просто беспорядочны. – meagar
Yep, справа, спасибо –
Вы также можете используйте sprintf за то, что вы описываете.
Также, если это для подключения к базе данных, вы можете рассмотреть возможность использования подготовленных операторов.
-1 за рекомендацию использовать небезопасную функцию 'sprintf'. –
+1 для подготовленных операторов, -1 для 'sprintf' (используйте' string', streams или в худшем случае 'snprintf'. –
+1 для подготовленных операторов. Серьезно, слушайте этого парня. Do _not_ concatenate SQL вроде этого _ * ever * _. В лучшем случае ваша программа будет вести себя нечетно, когда будет задан определенный ввод. В худшем случае кто-то будет использовать эту легко обнаружимую уязвимость системы безопасности и сделает то, о чем вы пожалеете. –
См. [SQL injection attack] (http://en.wikipedia.org/wiki/SQL_injection) –