免责声明:我对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列表列表的正确方法,但是我并不真正了解正在发生的事情或如何修复它。
提前致谢:)
答案 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);