Использование printf для печати символов, когда у меня есть только пустой указатель на данные

0

Поэтому у меня есть структура с указателем void как член, который указывает на данные. Я знаю, что это куча символов, и я знаю размер (другой член). Я хочу напечатать его таким образом, как

for (in i = 0; i < str.size; i++)
  printf("%c", (char)str.data[i]);

Это неправильно в соответствии с компилятором. Я знаю, что мне нужно, чтобы сказать printf правильный размер, но я не знаю, как это сделать. Любая помощь приветствуется. А также, поскольку я использую c++, есть ли более удобный способ, возможно, с std::string?

Теги:
pointers
printf

2 ответа

1

"У меня есть структура с указателем 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;

обратите внимание, что это решение также автоматически завершает нуль.

0

попробуй это:

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

новый способ печати

  • 0
    Откуда он знает размер «str.data»?
  • 0
    Я забыл размер строки в конструкторе, мой плохой

Ещё вопросы

Сообщество Overcoder
Наверх
Меню