在阵列中存储易失性字符

时间:2018-03-21 08:32:22

标签: c arrays types volatile chars

免责声明:我对C和一般编程都很陌生,所以这个问题可能表明缺乏基本知识。

我试图存储一组类型为' volatile char'的温度读数。在数组中。温度读数和数组分别声明如下:

volatile char TempCelsiusDisplay[] = "+abc.d C";
volatile char temps[60];

其余代码似乎工作正常,直到我尝试在数组中存储温度值

temps[59] = TempCelsiusDisplay;

引发了错误:

Error: A value of type "volatile char *" cannot be assigned to an entity of 
type "char" in "main.cpp", Line: 70, Col: 20

有人能够解释为什么会这样吗?在我看来,我声明数组的方式不是声明volatile列表列表的正确方法,但是我并不真正了解正在发生的事情或如何修复它。

提前致谢:)

1 个答案:

答案 0 :(得分:2)

Temps是一个单个字符数组,因此temps [59]的类型为char。所以说

temps[59] = TempCelsiusDisplay;

您正在尝试将char [](char数组)类型的值赋值为char(单字符)类型的值,这当然是不可能的。

如果要将TempCelsiusDisplay中的字符串复制到temps中,可以使用strcpy_s:

strcpy_s((char*)temps, sizeof(temps), (const char*)TempCelsiusDisplay);

另一方面,如果您希望数组temps中的每个条目都能够保存TempCelsiusDisplay中包含的温度字符串,那么您需要声明一个字符串数组(char指针),如下所示:

volatile char* temps[60];

然后你可以将字符串TempCelsiusDisplay复制到数组中的一个字符串中:

temps[0] = (char*) malloc(10);    // allocate memory (example: 10 bytes)
strcpy_s((char*)temps[0], 10, (const char*)TempCelsiusDisplay);
// ... use string
free((void*) temps[0]);    // free memory

或者,您可以通过声明多维数组来省去动态分配内存的麻烦,如下所示:

volatile char temps[60][10];

这声明了60个10个字符的数组。

然后你可以像以前一样复制字符串:

strcpy_s((char*)temps[0], sizeof(temps[0]), (const char*)TempCelsiusDisplay);