Sql Server 2005
дает Вам способность определить закрывающий индекс. Это - индекс, который включает данные из других столбцов на уровне листа, таким образом, Вы не должны возвращаться к таблице для получения столбцов, которые не включены в индексные ключи.
create nonclustered index my_idx on my_table (my_col1 asc, my_col2 asc) include (my_col3);
Это неоценимо для запроса, который имеет my_col3
в списке выборки, и my_col1
и my_col2
в где пункт.
С соответствующими включениями:
#include <sstream>
#include <ostream>
#include <iomanip>
Примерно так:
std::ostringstream oss;
oss << std::hex << a << '\t' << str << '\n';
Скопируйте результат из:
oss.str().c_str()
Обратите внимание, что результат c_str
является временным (!) const char *
, поэтому, если ваша функция принимает char *
, вам нужно будет где-то разместить изменяемую копию. (Возможно, скопируйте его в std :: vector
.)
#include <stdio.h>
char display_string[200];
sprintf(display_string,"%X\t%s",a,str.c_str());
Я использовал sprintf для форматирования вашего числа как шестнадцатеричного.
str.c_str ()
вернет C-строку с завершающим нулем.
Примечание: не отвечая на главный вопрос, поскольку ваш комментарий указал, что в этом нет необходимости.
те, кто пишет "const char * myString =" a number ";" просто паршивые программисты. Не имея возможности усвоить основы C, они бросаются в C ++ и начинают говорить о вещах, которых они просто не понимают.
Тип «const char *» - это указатель. «число» - это массив. Вы смешиваете указатели и массивы. Да, компиляторы C ++ иногда позволяют печатать по воздуховоду. Но вы также должны понимать - если вы печатаете по воздуховоду, не понимая, где находится ваша «дуктивность», - вся ваша программа - это просто клейкая лента.
Попробуйте следующее:
int myInt = 31;
const char* myString = "a number";
std::string stdString = "a number";
char myString[100];
// from const char*
sprintf(myString, "%x\t%s", myInt, myString);
// from std::string :)
sprintf(myString, "%x\t%s", myInt, stdString.c_str());