keil c语言字符串赋值,在c(keil v5)uvision中按字符串初始化枚举(Initialize enum by string in c (keil v5)uvision)...

在c(keil v5)uvision中按字符串初始化枚举(Initialize enum by string in c (keil v5)uvision)

我正在使用这些代码从uart接收字符串,然后将它们与此枚举匹配,然后将它们放在switch-case上。

char temp[3],rx_buf[100];

enum form {

GGA = 1,

GSA

};

enum form gnssform ;

sprintf(temp,"%c%c%c",rx_buf[3],rx_buf[4],rx_buf[5]);

gnssform=temp;

我无法理解我们可以直接使用像EXAMPLE这样的东西:

gnssform=GSA;

并且没有错误,但是这个:

gnssform=temp;

没有编译。请告诉我可能的方法这样做???,因为这个例子我相信它一定是可能的。 错误是:

“char *”类型的值不能分配给“枚举形式”类型的实体

请不要告诉我使用if-else因为我讨厌那个。

最后我用了

if(rx_buf[3]=='G'&&rx_buf[4]=='G'&&rx_buf[5]=='A')gnssform=GGA;

else if(rx_buf[3]=='G'&&rx_buf[4]=='S'&&rx_buf[5]=='A')gnssform=GSA;

I'm using these code to receive string from uart then matching them with this enum then putting them on switch-case.

char temp[3],rx_buf[100];

enum form {

GGA = 1,

GSA

};

enum form gnssform ;

sprintf(temp,"%c%c%c",rx_buf[3],rx_buf[4],rx_buf[5]);

gnssform=temp;

I can't understand that we can directly use something like EXAMPLE:

gnssform=GSA;

and there is no error ,but this:

gnssform=temp;

not compiling .and please tell me the possible way to do this???,because of this EXAMPLE I believe that it must be possible. the error is :

a value of type "char *" cannot be assigned to an entity of type "enum form"

please do not tell me to use if-else because I hate that.

Finally I used

if(rx_buf[3]=='G'&&rx_buf[4]=='G'&&rx_buf[5]=='A')gnssform=GGA;

else if(rx_buf[3]=='G'&&rx_buf[4]=='S'&&rx_buf[5]=='A')gnssform=GSA;

原文:https://stackoverflow.com/questions/37948723

更新时间:2019-12-15 09:19

最满意答案

GSA是enum form的常数值。

temp是指向三个字母'GSA'的char指针。

它们不是同一个东西,你不能直接分配它们。

GSA is a constant value of enum form.

temp is a char pointer to the three letters 'GSA'.

They are not the same thing, and you cannot directly assign them.

2016-06-21

相关问答

keil uvision4 出现“c contains an incorrect path”是什么原因啊? 楼主去凡窝电脑技术论坛看看吧 那里的技术教程很多的 涉及很多方面的网络技术 有机会多去那看看教程吧

你没有为noFilledStr分配任何内存,所以它的值是不确定的, strcat(noFilledStr, tmp)是未定义的。 使用malloc分配内存并用返回的指针初始化noFilledStr : char* noFilledStr = malloc(number_of_bytes);

arr中的字符串是char[4] ,而不是char[3] (不要忘记空字节!)。 tmp太小而不能容纳它们,所以strcpy(tmp, arr[i])写出界限。 You didn't allocate any

...

我相信Keil在文件夹结构意义上并不直观。 但是,它可能适用于模块化设计,因为它可以轻松地包含来自计算机上许多位置的文件(git,库等...)。 让我们从问题一开始(添加头文件):main.c文件中的头文件是已经包含的“工作”的图像。 通过右键单击main.c的父文件夹添加新文件,然后单击“将新项添加到组”。 在菜单中,选择C-file / H-file或任何其他适当的文件。 如果还没有组,只需从父文件夹添加一个组。 右键单击并按“添加组...”。 现在,可能让您感到困惑的是.h文件不会出现在您刚

...

GSA是enum form的常数值。 temp是指向三个字母'GSA'的char指针。 它们不是同一个东西,你不能直接分配它们。 GSA is a constant value of enum form. temp is a char pointer to the three letters 'GSA'. They are not the same thing, and you cannot directly assign them.

您是否尝试在启动文件中进行更改? 使用嵌入式C语言编写代码会更容易... 想一想!! Did you try to make changes in your Startup file?? Using embedded C language would be much more easy in writing this code... Think on it!!

评估版本限制了人们购买产品。 如果您认为自己拥有完整版本,则可能需要在某处输入许可证密钥才能解锁。 如果您没有钥匙,您必须从您的雇主/学校/任何人使用它,购买一个或选择不同的IDE。 如果您认为您的代码大小低于2k,则可能存在其他问题。 或者也可能在评估版中禁用调试器。 准确查看评估版本的限制。 祝你好运! The evaluation version has limitations to get people to purchase the product. If you believe you

...

从keil ID检查“目标选项”中的所有设置为步骤1:选择对象的文件夹。 第2步:设置可执行文件的名称。 第3步:选中创建可执行按钮。 第4步:选中Create HEX file。 步骤5:从HEX-386或HEX-80等组合框中选择HEX文件格式。 第6步:确定并构建。 Check All the settings in "Option for Target" from keil ID as Step 1: Select folder for objects. Step 2: Set Name

...

我不相信那些是常规函数,而是生成二进制文件的非标准内置函数被汇编代码替换。 看到这个。 这里要考虑3条MISRA规则,它们不一定要相互协调: 所有代码必须遵循ISO C. 所有功能都必须有原型。 必须封装和记录汇编语言的所有使用。 我要做的是将所有这些“函数调用”移动到一个单独的文件和文档中,该文件包含程序中内联汇编的所有调用。 您可能需要这样的文件来满足有关内联汇编的其他MISRA规则。 说明这些函数用于封装汇编程序。 然后将其从静态代码分析中排除,除非静态分析器支持给定的汇编程序和/或“ARM

...

在Keil C51中,引用手册 : sbit类型在特殊功能寄存器(SFR)中定义一个位 因此,您不是在循环之前声明变量X并读取它一次,而是定义对P3.3的引用 ,并在循环的每次迭代中读取它的状态。 也就是说X是对硬件I / O引脚寄存器的引用,而不是变量。 尽管外观sbit不是一个简单的typedef别名,而^不是一个按位XOR运算符。 相反,它定义了对位可寻址寄存器的引用。 将X写入分配给硬件寄存器 - 然后在这种情况下由硬件定义行为而不是语言。 当外部拉高时,显然会改变X值的能力,我猜测是GP

...

创建一个新项目“freetype”。 在项目设置中,将“输出”更改为静态库: 将freetype源添加到项目中,然后构建。 不要使用“合并”的源文件 - 这将破坏库的粒度并导致过大的代码。 将生成的freetype.lib文件添加到应用程序项目中。 链接器将仅从库中选择解析应用程序中的引用所需的那些模块,从而将大小保持在最小。 您可以通过直接在应用程序中包含freetype源并使用跨模块优化来获得更小的代码大小(无论使用单独的编译还是合并文件,这都可以工作); 但是构建时间可能过长,因为它需要重复

...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值