C - 轻松将void **变成char *?

时间:2017-03-31 17:06:09

标签: c arrays pointers

我的一个数据结构是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

1 个答案:

答案 0 :(得分:0)

编辑:

我不明白你的问题......

这里不需要进行优化,因为printf最终将调用跨越数千条指令的I / O函数(想象一下如果你的角色恰好触发窗口滚动,你的CPU会经历什么)。

无论你的神秘人物的起源是什么,从它们中产生一个合适的C字符串所需的时间将是完全可以忽略的。

所以只需循环遍历它们并将它们放在一个基本的字符数组中,添加一个\0终结符,调用printf("%s" ...,然后Bob将成为你快乐的叔叔。