非常遗憾的是,我不得不承认我已经尝试了一段时间自学c++,但是当涉及到指针时,我真的很困惑。
有人可以向我解释为什么这行不通吗?我没有任何细分错误。它编译我什么也没得到。
#include <iostream>
#include <cstdlib>
#include <cstring>
int main(){
void *buffer = new char[8];
memset( (char*)&buffer, 'a', sizeof(buffer) );
std::cout << (char*)buffer <<std::endl;
return 0;
}
最佳答案
我看到以下问题。
问题1
memset( (char*)&buffer, 'a', sizeof(buffer) );
那是传递给
memset
的错误地址。您需要使用:memset( buffer, 'a', sizeof(buffer) );
问题2
sizeof(buffer)
计算为指针的大小(32位平台为4,64位平台为8)。您需要使用数组的长度,即8
。memset( buffer, 'a', 8 );
问题3
std::cout << (char*)buffer <<std::endl;
仅当
buffer
为空终止字符串时才有效。如果使用memset
,则所有有效内存都将设置为a
。因此,字符串不是以null结尾的。您需要确保
buffer
以null终止。buffer[7] = '\0';
std::cout << buffer <<std::endl; // No need for explicit cast
关于c++ - 在C++中分配内存的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35821711/