Я вижу в коде, который я унаследовал, что предыдущий программист printf
s индекс массива, используя% x. Однако, если я просто попытаюсь добавить тот же индекс массива в строку с +=
строка заканчивается тем, что является связкой символов.
Как добавить переменную, к которой можно получить доступ с помощью% x, в конец строки?
printf("%x", array[i]);
Вот как выглядит код вывода.
Но если я попробую:
string s = "";
s += array[0];
Это просто добавляет странный символ.
У вас есть пара вариантов. Ты можешь использовать sprintf
или один из его кузенов, которые работают как printf
или же ты можешь использовать std::ostringstream
,
snprintf
пример
#include <cstdio>
char buffer[100] = "some text already there ";
std::snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), "%x", index);
.
std::ostringstream
пример
#include <sstream>
std::string text("some already existing text ");
std::ostringstream buffer;
buffer << std::hex << index;
text += buffer.str();
Ваш предшественник был не печатать «индекс массива», и вы тоже. i
это индекс; array[i]
является элементом в этом индексе.
Вы не сказали нам, что это за типы, но если предположить, что это указатель (исходя из того, что ваша программа компилируется, и что ваш предшественник решил вывести ее в виде шестнадцатеричной строки в printf
вызов), тогда ваша проблема в том, что вы пытаетесь выполнить конкатенацию строк на указателе, а не на удобочитаемом человеке представление этого указателя.
Теперь потоки ввода / вывода C ++ в стандартной библиотеке имеют встроенные лексические преобразования, которые делают это для вас.
/** Example 1 */
// Output like: 0xDEADBEEF
void* somePtr = foo();
printf("%x\n", somePtr);
/** Example 2 */
// invalid unless somePtr is a valid C-string really
std::string str1 = somePtr;
/** Example 3 */
// Does the translation to human-readableness for us
std::cout << std::hex << somePtr << '\n';
/** Example 4 */
std::stringstream ss;
// Does the translation to human-readableness for us
ss << somePtr;
// Now get a string back out of it
std::string str2 = ss.str();
Нам нужно больше узнать о вашем сценарии использования, чтобы помочь вам в дальнейшем.
Чтобы преобразовать строку c в std :: string, выполните:
#define LENGTH 100
char cstr[LENGTH] = "something";
std::string cppstr(cstr, cstr+strlen(cstr));
Чтобы добавить:
cppstr.append(cstr, cstr+strlen(cstr));