C语言中如何将volatile char类型温度值存入数组?
解决你的C语言字符串赋值问题
嘿,我来帮你捋清楚这个错误的根源~
首先,你遇到的问题核心是类型不匹配:
TempCelsiusDisplay是一个volatile char数组,当你直接用它的名字时,它会自动退化为指向数组首元素的指针(也就是volatile char*类型)。- 而
temps[59]是temps数组里的单个char元素,你试图把一个指针值塞给单个字符,编译器肯定会报错。
接下来根据你的实际需求,给你两种解决方案:
方案一:复制整个温度字符串的内容到temps数组
如果你想把TempCelsiusDisplay里的"abc.d C"这个字符串完整存到temps里,可以手动遍历复制(因为volatile变量用标准字符串函数需要类型转换,手动复制更安全):
int idx = 0; // 逐个复制字符,直到遇到字符串结束符'\0' while (TempCelsiusDisplay[idx] != '\0') { temps[idx] = TempCelsiusDisplay[idx]; idx++; } temps[idx] = '\0'; // 别忘了加上字符串结束符,否则后续用字符串函数会出问题
这样temps里就会完整保存"abc.d C"的内容啦。
方案二:把温度字符串的指针存入数组(适合存储多个温度字符串)
如果你本来是想把多个温度字符串的指针存在temps里(比如记录60个不同的温度读数指针),那你需要修改temps的声明,把它改成指针数组:
volatile char* temps[60]; // 数组的每个元素都是指向volatile char的指针
这时候再执行赋值就没问题了:
temps[59] = TempCelsiusDisplay;
不过要注意,这种方式存的是指针,不是字符串内容,如果TempCelsiusDisplay的后续值被外部因素(比如硬件)修改,temps[59]指向的内容也会跟着变,这其实符合volatile的设计初衷~
最后再提个小提醒:volatile关键字是告诉编译器不要优化对这个变量的访问,所以处理这些变量时,别依赖编译器的缓存,确保每次都是直接读取内存里的最新值哦。
内容的提问来源于stack exchange,提问作者Rachel Fallow
相关产品推荐
相关产品推荐

