1

编译器告诉我“将 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

4 回答 4

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;
    }
}
于 2012-10-19T14:25:00.490 回答
3

您不能分配数组。您可以将 的类型更改value为 achar*或将 的内容复制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 功能而不是使用 aswitch您可以创建将值与std::map相关联的a :intstd::string

#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

于 2012-10-19T14:18:26.567 回答
0
#include <string.h>

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

您不能在 C/C++ 中分配数组。有一些功能可以为您完成。如果您的 char 数组表示 C 风格的字符串(即以空字符结尾的字符序列),那么还有更多专门的函数。strcpy是这些功能之一。

于 2012-10-19T14:17:48.017 回答
-1

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

于 2012-10-19T14:38:16.567 回答