Поэтому у меня есть структура с указателем void как член, который указывает на данные. Я знаю, что это куча символов, и я знаю размер (другой член). Я хочу напечатать его таким образом, как
for (in i = 0; i < str.size; i++)
printf("%c", (char)str.data[i]);
Это неправильно в соответствии с компилятором. Я знаю, что мне нужно, чтобы сказать printf правильный размер, но я не знаю, как это сделать. Любая помощь приветствуется. А также, поскольку я использую c++, есть ли более удобный способ, возможно, с std::string
?
"У меня есть структура с указателем void как член"
data[i]
эквивалентно:
*(data + i)
и вы не можете выполнить арифметику указателя с указателем void.
"Есть ли более удобный способ, возможно, с std::string
?"
Есть конечно:
char* cdata = static_cast<char*>(str.data);
std::string myStr(cdata, cdata + str.size);
std::cout << myStr;
обратите внимание, что это решение также автоматически завершает нуль.
попробуй это:
char *array = static_cast<char *>(str.data);
for (in i = 0; i < str.size; i++)
printf("%c", array[i]);
или со строкой:
std::string s(static_cast<char *>(str.data), str.size);
std::cout << s;
или убедитесь, что последний символ str.data равен '\ 0', и вы его распечатываете следующим образом:
char *array = static_cast<char *>(str.data);
printf("%s", array);
РЕДАКТИРОВАТЬ
Строковый конструктор, модифицированный для получения размера входного массива символов
EDIT2
новый способ печати