如何在C中为char char *分配char?
const char* cp;
unsigned maxlen = 20;
cp = new char[maxlen];
char p = 'U';
cp = p;
我收到错误:
Error: invalid conversion from 'char' to 'const char*
如何将char p分配给数组的第一个元素cp?
答案 0 :(得分:2)
如何将char p分配给数组的第一个元素cp?
你不能,因为cp
是指向const char
的指针。 const
可以防止初始化后出现任何突变。
如果您确实想要更改cp
个元素,请移除const
:
char* cp;
unsigned maxlen = 20;
cp = new char[maxlen];
char p = 'U';
cp[0] = p;
请注意,以上是可怕的C ++。您应该将std::vector
用于动态数组(或std::array
用于固定大小的数组)。例如:
std::vector<char> cp;
cp.resize(20);
cp[0] = 'U';
答案 1 :(得分:0)
你不能以安全的方式这样做,更好的想法是:
char * nonConstPtr = new char[len];
*nonConstPtr = 'a';
nonConstPtr[1] = 0;
char const * constPtr = nonConstPtr;
你可以使用你现在拥有的代码进行投射,但抛弃常量通常是一个坏主意(tm):
const char* cp;
unsigned maxlen = 20;
cp = new char[maxlen];
char p = 'U';
char * ptr = (char*)cp;
memset(ptr, 0, maxlen);
*ptr = p;
答案 2 :(得分:0)
这是可以接受的还是错的?
unsigned maxlen = 20;
char *cp;
cp = (char*) malloc(sizeof(char) * maxlen);
char c = 'P';
*cp = c;
我知道缺少空终止。我尝试使用strncpy,但它不能用于char。
非常感谢你的建议。
答案 3 :(得分:-3)
如何将char赋值给const char *
void OrderManager::validate(const ItemManager& itemManager, std::ostream& os)
{
for (int i = 0; i < std::vector<CustomerOrder>::size(); i++)
{
for (int j = 0; j < std::vector<CustomerOrder>::at(i).noOrders(); j++)
{
for (int k = 0; k < itemManager.size(); i++)
{
if (std::vector<CustomerOrder>::at(i)[j] == itemManager.at(k).getName())
{
break;
}
if (k == itemManager.size() - 1)
{
os << std::vector<CustomerOrder>::at(i)[j] << " is unavailable." << std::endl;
}
}
}
}
}