2011-05-03 163 views
0

嘿,我想重写C++中的代码在C中工作。我基本上只是想在C中找到新的和删除的等价物,但它不是很工作,在这里是我的代码:动态大小输入缓冲区控制台游戏在C

下面是C++代码:

// Gets the number of events 
ReadConsoleInput(rHnd, eventBuffer, numEvents, &numEventsRead); 
    // Sizes the eventbuffer based on the number of events 
INPUT_RECORD *eventBuffer = new INPUT_RECORD[numEvents]; 

    // Removes from memory: 
delete[] eventBuffer; 

这里是我迄今为止在C:

// Event buffer 
INPUT_RECORD *eventBuffer; 
    // Gets the number of events 
ReadConsoleInput(rHnd, eventBuffer, numEvents, &numEventsRead); 
    // Sizes the event buffer based on the number of events. 
eventBuffer = malloc(numOfEvents * sizeof(*eventBuffer)); 
    // Removes from memory: 
free(eventBuffer); 

上面的代码几乎可与一个错误: 错误:类型的值“无效*”不能分配给类型的实体“INPUT_RECORD *”

回答

3

你一定要投它 -

eventBuffer = (INPUT_RECORD*) malloc(numOfEvents * sizeof(*eventBuffer)); 

当然,有人会一起去,说该标准说你不必投“malloc”的结果。显然,在这种情况下,标准是无关紧要的:)

1

您的C++代码不起作用。您传递eventBufferReadConsoleInput(),但你声明它是后来才:

// Gets the number of events 
ReadConsoleInput(rHnd, eventBuffer, numEvents, &numEventsRead); 
    // Sizes the eventbuffer based on the number of events 
INPUT_RECORD *eventBuffer = new INPUT_RECORD[numEvents]; 

如果ReadConsoleInput()需求eventBuffer的东西,你需要调用函数之前声明它。

无论如何,等效C代码将是:

INPUT_RECORD* eventBuffer; 
ReadConsoleInput(rHnd, eventBuffer, numEvents, &numEventsRead); 
eventBuffer = (INPUT_RECORD*) malloc(numOfEvents * sizeof(INPUT_RECORD));