我的一个数据结构是void*
类型的数组。这样做是因为它允许输入任何类型的数据,而不需要硬编码类型。
在这种情况下,此数据结构现在包含void*
的数组,其中每个void*
实际上是指向字符的指针。
有没有办法可以将这个数组视为char*
(意思是一个字符数组),还是我必须遍历它,通过检索值添加到新数组中?
// this is not my actual code, just demonstration
char v = 'A';
size_t size = 10;
void** myArr = malloc(sizeof(void*) * size);
for (unsigned int i = 0; i < size - 1; i++)
{
char *ptr = malloc(sizeof(char));
*ptr = v++;
myArr[i] = ptr; // ptr here gets casted into a void*
}
char *end = malloc(sizeof(char));
*end = '\0';
myArr[size - 1] = end;
/*
* I now want to turn myArr into an array of characters,
meaning I could call printf and it would successfully print the array
with printf("%s", <something here>);
*/
char* arrayInStringForm = *(char**)myArr; // I don't think this can work.
// Any way to do it without looping or using more memory?
printf("%s\n", arrayInStringForm);
// Expected output:
// A B C D E F G H I J
答案 0 :(得分:0)
编辑:
我不明白你的问题......
这里不需要进行优化,因为printf
最终将调用跨越数千条指令的I / O函数(想象一下如果你的角色恰好触发窗口滚动,你的CPU会经历什么)。
无论你的神秘人物的起源是什么,从它们中产生一个合适的C字符串所需的时间将是完全可以忽略的。
所以只需循环遍历它们并将它们放在一个基本的字符数组中,添加一个\0
终结符,调用printf("%s"
...,然后Bob将成为你快乐的叔叔。