如何将char赋给const char *

时间:2017-12-16 19:09:50

标签: c++ arrays char

如何在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?

4 个答案:

答案 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; 
                    }
            }
        }
   }
}