所以我有一个结构,它的成员是 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);
编辑
修改字符串构造函数以接收输入字符数组的大小
编辑2
新的印刷方法