首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字符被GNAT 18.1视为字符串

字符被GNAT 18.1视为字符串
EN

Stack Overflow用户
提问于 2018-11-29 15:06:44
回答 2查看 321关注 0票数 3

我将我的项目从GNAT 7.3.1传递到了GNAT 18.1,而且我对char做作有一个编译错误。

我想影响字符串末尾的度'°‘这个特殊字符,但是编译器返回这个错误:

代码语言:javascript
运行
复制
R : String := "-NNN.N°";
begin
   ...
   R(R'Last) := '°';
   return R;
end

我得到了这个:

代码语言:javascript
运行
复制
strings are delimited by double quote character
expected type "Standard.Character"
found a string type

如果我用字母或数字替换符号°,它就能工作。如果我试图将其转换为R(R'Last) := Standard.Character('°');,编译器也会说同样的话。

有人遇到过同样的问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-29 16:16:43

您的代码(从这里复制并粘贴到我的编辑器中)是UTF-8编码的,因此您的学位符号使用两个字节(十六进制C2B0 )编码。

默认情况下,所以你得告诉我将期望拉丁文-1在字符/字符串/文本IO中使用UTF-8,使用-gnatW8

lnlb.adb为例,

代码语言:javascript
运行
复制
with Ada.Text_IO;
procedure Lnlb is
   R : String := "-NNN.NX";
begin
   R(R'Last) := '°';
   Ada.Text_IO.Put_Line (R);
end Lnlb;

编译(基于macOS)

代码语言:javascript
运行
复制
$ gnatmake lnlb.adb -gnatW8
gcc -c -gnatW8 lnlb.adb
gnatbind -x lnlb.ali
gnatlink lnlb.ali

然后跑

代码语言:javascript
运行
复制
$ ./lnlb
-NNN.N°
票数 10
EN

Stack Overflow用户

发布于 2018-12-02 10:07:06

字符被定义为拉丁文-1,所以当使用标准键盘上不能直接使用的字符时,最好以其他方式引用它们,而不是使用字符文字:

代码语言:javascript
运行
复制
R (R'Last) := Ada.Characters.Latin_1.Degree_Sign;

代码语言:javascript
运行
复制
R (R'Last) := Character'Val(176); -- Degree symbol
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53541972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档