关于在KEIL中对字符数组赋值字符串操作的奇怪问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于在KEIL中对字符数组赋值字符串操作的奇怪问题?相关的知识,希望对你有一定的参考价值。

我在KEIL中针对单片机编写程序时,遇到一个奇怪的问题。

在主程序中对一个字符数组赋值操作,总是提示如下警告!
“APP.C(23): warning C260: '=': pointer truncation” 说明指针被截断!多次试验发现原因不是数组长度不足,无论数组长度多长都提示同样的警告!
试验发现,对数组赋的值也不正确!
我将“c[10]="ABC";” 而实际存入数组的数值根本不是"ABC"!!
请问如何在KEIL中执行对字符数组的操作? 请网友帮忙解答!
我的程序需要在程序执行时对字符数组,赋值字符串变量!如果单独一个个的赋值会很麻烦!有没有别的方法可以完成的程序设计目的?比如KEIL的库里是否有支持的函数? (malloc)?或者只能通过指针来实现?请网友根据自身的经验来解答!

字符串只能在定义的时候初使化。如果在程序执行时要对其值只能单独操作,即只能单独赋值,或是循环赋值!
例如:
int c[10] = "abc";

int c[10];
....//其他执行代码
c[0] = 'a';
c[1] = 'b';
c[2] = 'c';
c[3] = '\0' ;
参考技术A 嗯,这个问题我也遇见过,在其他的编程环境是可以这样赋值的,但在keil中是非法的,我解决的方法如下:
假如说你要程序执行时对a[]字符赋值:你可以先将可能出现的或者要用的字符串,在开始定义的时候,赋值给b[],c[],d[]....数组,程序执行的时候再来判断,是将b[]数组,还是c[]数组,或者其他数组赋给a[].例子如下:
#include<reg52.h>
void main()

string a[50];
char b1[50]="this is 89s51";
char b2[50]="this is lcd";
char b3[50]="welcome to the 8051";
if(这里写你的控制条件)
a[50]=b1[50];

if(这里写你的控制条件)
a[50]=b2[50];

if(这里写你的控制条件)
a[50]=b3[50];
参考技术B 你所谓的“运行时赋字符串变量”,这个字符串哪里来的?
1. 固定的字符串。那么应当是常量数组,直接以字符拷贝即可;
2. 变长的字符串,例如来自串口。指针拷贝自串口缓冲区。
参考技术C c[10]="ABC"; 改成 c[]="ABC";

关于CString之间赋值的问题

现在有一个CString的变量,比如取名字叫allstr,取值为
(390.0 392.0 392.0 380.0 219.0 219.0 219.0 013 019 014 50.0 433.0 42.0 00000000 242.17 100 00 00 00 00 00 00000000 01
我想将对应的值显示到对话框的edit框中
edit框变量比如取名字叫m_a,m_b,m_c等,也是CString的变量
希望通过在allstr中取值让m_a=390.0,m_b=392.0,m_c =380.0
大家有什么简单的好方法?比如是CString的函数之类的
还有怎样把CString的m_a转成float变量a的好方法呢?
望不吝赐教

参考技术A 哦 这样的话 你可以试试 CString.Find(" ");函数 意思是在CString中寻找空格字符 找到了 你再寻找第二个空格 再把两个空格之间的字串赋值给m_a及其它
float a = atof(m_a);
参考技术B 可以使用sscanf。
sscanf(allstr,"%f%f%f...",m_a,m_b,m_c,...);
就像scanf一样使用即可。本回答被提问者采纳
参考技术C 不是很理解你的想法,你想怎样通过allstr让m_a、m_b、m_c取值? 是想通过搜索查找allstr里的字串,还是怎么的

字符串转化为数值可以用 atof()标准库函数。

以上是关于关于在KEIL中对字符数组赋值字符串操作的奇怪问题?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中对数组的操作

Java中怎么给数组批量赋值

关于C++中string类型变量的赋值

STM32的数组赋值

关于JS截取字符串以及截取数组项的几种常见方法解析

C语言运行问题关于赋值 char scanf的