如何将char *分配给char数组?

时间:2012-10-19 14:16:48

标签: c++ char

编译器告诉我“char *赋值给char [32]的不兼容类型” 这是我的代码:

char* generalOperations[2]={"Off","On"};

 void test(){
   char value[32];
    switch(swapVariable){
     case 0:
      value=generalOperations[0]; //<==Error HERE!
     break;
    }

 }

[解决]:

  strcpy(value,generalOperations[0]);

4 个答案:

答案 0 :(得分:8)

使用std::string代替char*std::array<T, N>代替T[N]。两者都是类型安全的(与memcpy相对),两者都是现代C ++风格,并且都可以使用赋值运算符直接赋值。

#include <array>
#include <string>

std::array<std::string, 2> generalOperations{"Off", "On"};

void test() {
    std::string value;
    switch(swapVariable) {
        case 0: value = generalOperations[0]; break;
    }
}

答案 1 :(得分:3)

您无法分配数组。您可以将value的类型更改为char*,也可以将generalOptions[0]的内容复制为value。如果您要复制内容,则需要确保value有足够的空间来容纳generalOperations中元素的内容。

修改字符串文字是未定义的行为,通过将类型更改为const char*,编译器可以检测到任何修改generalOperations中的某个条目的尝试,而不是在运行时遇到奇怪的行为:

const char* generalOperations [2]={"Off","On"};

const char* value;

注意,如果要初始化,则不必指定数组中的元素数量:

const char* generalOperations [] = {"Off","On"};

或者,如果这确实是C ++,您可以将value改为std::string而只是分配给它,它将复制generalOperations元素。


由于C ++似乎真的是语言而允许使用C ++ 11功能而不是使用switch,因此您可以创建std::map来将int值与{std::string相关联1}}:

#include <iostream>
#include <string>
#include <map>

const std::map<int, std::string> generalOperations{ {17, "Off"},
                                                    {29, "On" } };
int main()
{
    auto e = generalOperations.find(17);
    if (e != generalOperations.end())
    {
        // Do something with e->second.
        std::cout << e->second << "\n";
    }
    return 0;
}

演示:http://ideone.com/rvFxH

答案 2 :(得分:0)

#include <string.h>

...
strcpy(value, generalOptions[0]);

您无法在C / C ++中分配数组。有功能为您做到这一点。如果您的char数组表示C样式字符串(即空终止的字符序列),那么还有更多的专业函数。 strcpy是其中一项功能。

答案 3 :(得分:-1)

您的分配错误,因为您无法将char *分配给char数组而不是使用此分配,您可以使用strcpy()。