簡體   English   中英

如何將char *分配給char數組?

[英]How do I assign a char* to a char array?

編譯器告訴我“在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]);

使用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;
    }
}

您不能分配數組。 您可以將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您可以創建一個將int值與std::string關聯的std::map

#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

#include <string.h>

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

您不能在C / C ++中分配數組。 有一些功能可以幫助您。 如果您的char數組表示C樣式字符串(即,以null終止的字符序列),則還有更多專用功能。 strcpy是這些功能之一。

您的分配是錯誤的,因為不能將char *分配給char數組,而不是使用此分配,則可以使用strcpy()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM