String 如何从GetEnv&;初始化Ada无界字符串;字面意义的
G'day,我在一段简单的代码中发现了编译错误。目标是使用环境变量作为默认值的一部分。我们正在使用Ada95,所以我想知道它是否是一个版本 我们所说的“模型”看起来像这样:String 如何从GetEnv&;初始化Ada无界字符串;字面意义的,string,ada,getenv,String,Ada,Getenv,G'day,我在一段简单的代码中发现了编译错误。目标是使用环境变量作为默认值的一部分。我们正在使用Ada95,所以我想知道它是否是一个版本 我们所说的“模型”看起来像这样: Default\u Override\u Message\u Text:Ada.Strings.Unbounded.Unbounded\u String :=Ada.Strings.Unbounded.To_Unbounded_String( Gnat.Os_Lib.Getenv(“数据文件”)& “/override_re
Default\u Override\u Message\u Text:Ada.Strings.Unbounded.Unbounded\u String
:=Ada.Strings.Unbounded.To_Unbounded_String(
Gnat.Os_Lib.Getenv(“数据文件”)&
“/override_required.txt”);
我在和上收到一个错误:
运算符的操作数类型无效&运算符的操作数类型无效“&”
Default\u Override\u Message\u Text:Ada.Strings.Unbounded.Unbounded\u String
:=Ada.Strings.Unbounded.To_Unbounded_String(
“数据文件”和“/override_required.txt”);
我转向了互联网和书籍,只是看起来它应该是有效的,这里有一个打字或其他方面的困难。PLEAC上给出的例子也给了我一个错误
- 请看下面的“GetEnv()”:
username:string:=Gnat.Os_Lib.Getenv(“用户”);
数据文件:字符串:=Gnat.Os_Lib.Getenv(“数据文件”);
给出了错误:
- 生成器结果预期类型“Standard.String”181:37预期类型“Standard.String”生成器结果
- 生成器结果发现类型为“System.Strings.String\u Access”181:37
数据文件:字符串:=Gnat.Os_Lib.Getenv(“GPS_数据文件”);
默认\u覆盖\u消息\u文本:Ada.Strings.Unbounded.Unbounded\u String
:=Ada.Strings.Unbounded.To_Unbounded_String(
数据文件&“/override_required.txt”);--错误
数据_文件_2:字符串:=“GPS_数据_文件”;--作品
默认\u覆盖\u消息\u文本:Ada.Strings.Unbounded.Unbounded\u String
:=Ada.Strings.Unbounded.To_Unbounded_String(
数据文件_2&“/override_required.txt”);--作品
我仍然在使用GetEnv做一些错误的事情,因为如果我能正确地从GetEnv()赋值,我们想要的一切看起来都会发生,类似于DATA\u FILES\u 2
选项会工作(根据我的编译器)
有人能指出我的错误吗?或者Ada95对我正在查看的示例使用了不同的规则?Gnat.Os_Lib.Getenv函数的声明是:
function Getenv (Name : String) return String_Access;
请注意,它返回一个字符串,而不是一个字符串(我不知道为什么)
添加.all
以从String\u访问
结果中获取String
值应该可以解决您的问题:
Default_Override_Message_Text : Ada.Strings.Unbounded.Unbounded_String
:= Ada.Strings.Unbounded.To_Unbounded_String(
Gnat.Os_Lib.Getenv( "DATA_FILES" ).all &
"/override_required.txt" );
(使用
Gnat.Os_Lib.Getenv
返回String\u Access
而不是String
可能是区分缺少的环境变量和值为空字符串的环境变量的一个机会。不幸的是,在这两种情况下,它都返回对空字符串的访问。)Gnat.Os_Lib.Getenv函数的声明是:
function Getenv (Name : String) return String_Access;
请注意,它返回一个字符串,而不是一个字符串(我不知道为什么)
添加.all
以从String\u访问
结果中获取String
值应该可以解决您的问题:
Default_Override_Message_Text : Ada.Strings.Unbounded.Unbounded_String
:= Ada.Strings.Unbounded.To_Unbounded_String(
Gnat.Os_Lib.Getenv( "DATA_FILES" ).all &
"/override_required.txt" );
(使用
Gnat.Os_Lib.Getenv
返回String\u Access
而不是String
可能是区分缺少的环境变量和值为空字符串的环境变量的一个机会。不幸的是,在这两种情况下,它都返回对空字符串的访问。)Gnat.Os_Lib.Getenv函数的声明是:
function Getenv (Name : String) return String_Access;
请注意,它返回一个字符串,而不是一个字符串(我不知道为什么)
添加.all
以从String\u访问
结果中获取String
值应该可以解决您的问题:
Default_Override_Message_Text : Ada.Strings.Unbounded.Unbounded_String
:= Ada.Strings.Unbounded.To_Unbounded_String(
Gnat.Os_Lib.Getenv( "DATA_FILES" ).all &
"/override_required.txt" );
(使用
Gnat.Os_Lib.Getenv
返回String\u Access
而不是String
可能是区分缺少的环境变量和值为空字符串的环境变量的一个机会。不幸的是,在这两种情况下,它都返回对空字符串的访问。)Gnat.Os_Lib.Getenv函数的声明是:
function Getenv (Name : String) return String_Access;
请注意,它返回一个字符串,而不是一个字符串(我不知道为什么)
添加.all
以从String\u访问
结果中获取String
值应该可以解决您的问题:
Default_Override_Message_Text : Ada.Strings.Unbounded.Unbounded_String
:= Ada.Strings.Unbounded.To_Unbounded_String(
Gnat.Os_Lib.Getenv( "DATA_FILES" ).all &
"/override_required.txt" );
(使用
Gnat.Os_Lib.Getenv
返回String\u Access
而不是String
可能是区分缺少的环境变量和值为空字符串的环境变量的一个机会。不幸的是,在这两种情况下,它都返回对空字符串的访问。)谢谢Keith--看起来这些示例是错的?谢谢Keith--看起来这些示例是错的?谢谢Keith--看起来这些示例是错的?谢谢Keith--看起来这些示例是错的?Ada 2005添加了包Ada.Directories
和Ada.Environment\u Variables
所以您无需硬编码依赖于操作系统的文件名约定或依靠GNAT包即可完成所需的工作。也许是时候考虑升级了?谢谢是的,我现在明白了。幸运的是,我们下面的朋友基思让我明白了。非常感谢,我正在学习这门语言。Ada 2005添加了包Ada.Directories
和Ada.Environment\u Variables
,这样您就可以做您需要的事情,而无需硬编码依赖操作系统的文件名约定或依赖GNAT包。也许是时候考虑升级了?谢谢是的,我现在明白了。幸运的是,我们下面的朋友基思让我明白了。非常感谢,我正在学习这门语言。Ada