【问题标题】:Storing Volatile Chars in an Array将易失性字符存储在数组中
【发布时间】:2018-08-30 06:49:02
【问题描述】:

免责声明:我对 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 字符列表的正确方式,但是我不太明白发生了什么或如何解决它。

在此先感谢 :)

【问题讨论】:

  • 编译器告诉你,temps[59] 是一个 charTempCelsiusDisplay 是一个 volatile chars 的数组。所以,我假设您想将第一个数组中的字符 复制 到第二个数组中。另外,请记住temps[59]temps 数组中的最后一个字符;你可能不想开始复制到那个地方,因为它会溢出。
  • 另外,如果你想将多个字符数组存储到temps,那么你希望temps是一个字符数组数组,即char * volatile temps[60](我也相信指针应该是易失的在这种情况下,不是数据),但很难准确地推荐如何进行分配,因为它没有指定如何分配和释放数组以存储单个温度。

标签: c arrays types volatile chars


【解决方案1】:

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

temps[59] = TempCelsiusDisplay;

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

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

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

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

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);

【讨论】:

    猜你喜欢
    • 2019-11-07
    • 1970-01-01
    • 2014-09-26
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2014-10-09
    相关资源
    最近更新 更多