HP OpenVMS Pascal 中的 C 空终止字符串

标签 c string char pascal

我有一个相当简单的Pascal程序,就是调用我编写的一些C函数。

我的C代码:

void connect_default(int* errorcode)
{
    // Connects the default user and places any error code in errorcode
}

void connect(char user[129], char password[129], int* errorcode)
{
    // Connects the given user and places any error code in errorcode
}

我试图在我的 Pascal 应用程序中调用这两个函数。这工作正常:

program pascaltest(INPUT, OUTPUT);
procedure connect_default(var errorcode: integer); external;

var
errorcode : integer := 0;

begin
    connect_default(errorcode);
    if errorcode <> 0 then
        writeln('Failed to connect with error code ', errorcode);
end.

但是我很难找出 Pascal 中使用什么数据类型,它对应于 C 中的 null 终止字符数组。Pascal 字符串似乎不是这样,因为它不会向 C 函数传递任何内容。

program pascaltest(INPUT, OUTPUT);
procedure connect(user : string, password : string, var errorcode: integer); external;

var
errorcode : integer := 0;

begin
    connect('MyUser', 'MyPassword', errorcode);
    if errorcode <> 0 then
        writeln('Failed to connect with error code ', errorcode);
end.

Pascal 中的哪种数据类型对应于以 null 结尾的 C 字符数组?我的环境是 HP OpenVMS 机器,而不是 Free Pascal,这意味着我无权访问我读过的 pchar 和 ansisstring 类型。

C 函数需要尽可能保持通用,我无法对它们进行任何更改,创建自定义结构(如此处描述的 Declaring Pascal-style strings in C ),因为 C 函数已经被用 C 编写的类似程序成功调用、Fortran 和 Cobol,我设法找到了所需的数据类型。

最佳答案

正如您在 HP 官方文档中看到的,您的 Pascal 版本支持以 null 结尾的字符串:http://h41379.www4.hpe.com/doc/82final/6083/6083pro_005.html#null_strings

2.7 Null-Terminated Strings

HP Pascal includes routines and a built-in type to better coexist with null-terminated strings in the C language. The C_STR_T datatype is equivalent to:

C_STR_T = ^ ARRAY [0..0] OF CHAR;

C_STR_T 是指向 ARRAY OF 的指针 字符。它不为任何字符数据分配内存。 C_STR_T 行为类似于普通的指针类型,您可以将 NIL 分配给它 可选的指针检查代码将检查是否取消引用 一个 NIL 指针。可以通过取消引用来使用单个字符 指针并使用数组索引。

在这些情况下,没有界限 即使启用了数组边界检查,也会执行检查。 但是,如果没有也不能取消引用 C_STR_T 指针 索引单个字符。如果您想访问整个 以 null 结尾的字符串,请参阅 PAS_STR 函数。

然后您可以使用该 C 样式字符串作为只读引用,或通过 PAS_STR 将它们转换为独立的 Pascal 字符串。功能:http://h41379.www4.hpe.com/doc/82final/6083/6083pro_016.html#pas_str_func

PAS_STRCPY会立即做相反的事情: http://h41379.www4.hpe.com/doc/82final/6083/6083pro_016.html#pas_strcpy

关于HP OpenVMS Pascal 中的 C 空终止字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49428180/

相关文章:

c - 为什么打印出 char 指针会产生整个数组而不是指针的内存地址?

c - 如何对 char 数组的数组使用指针?

C 代码、指针及其内容。考试题

c++: vector<string> 的迭代

c - 按 '/' 拆分字符串失败,C

c - 为什么 printf 中的\n 不打印 char 数组的值或旧值?

快速排序可以与多个数组一起使用吗?

c - 向处理函数发送时间相关信号并在 c 中正确理解 setitimer、getitimer

Excel公式查找单元格中最短的字符串/两位数字

java - 是否有任何形式可以将字符数组放在字符串上并再次更改它?