从 field_buffer 返回的 char* 指向的缓冲区大小
Size of buffer pointed to by char* returned from field_buffer
所以我正在尝试使用 <ncurses>
提供的 <form.h>
库
我正在阅读 this man page 告诉我函数:
char *field_buffer(const FIELD *field, int buffer);
return 类型是指向 char *
的指针。在这个指针的末尾,我怀疑是一个包含我想要访问的 chars
的 c 风格数组。
现在我可以谨慎地使用这个函数,并在读取数据时尽量不要越界(它 returns 所有字符都保存在一个字段中,所以我想不要循环超过字段大小是一种谨慎的方法)。但是我没有办法知道 char *
指向的缓冲区指针的大小吗?
我现在才这样读出数据:
char *ptr = fiel_buffer(someField, 0);
size_t dontKnow = 100; //if I had the underlying array arr I would do dontKnow = sizeof(arr) / sizeof(arr[0]
for (size_t i = 0; i < dontKnow; i++)
std::cout << ptr[i] << std::endl;
它没有明确说明,但由于没有指向长度参数的指针允许库 return 作为副作用的字符串长度,您有空终止字符串的 C 约定。
联机帮助页确实是这样说的:
The function field_buffer returns a pointer to the contents of the
given numbered buffer:
- The buffer contents always have the same length, and are padded
with trailing spaces as needed to ensure this length is the
same.
- The buffer contents are set with
set_field_buffer
, or as a side
effect of any editing operations on the corresponding field.
和
The function set_max_field
sets the maximum size for a dynamic field.
(另一个联机帮助页中提到了动态字段,form_field_info)。
实际上,“始终相同的长度”适用于该字段使用的列数。如果您存储了多字节字符串 (UTF-8),则每个缓冲区的字节数不一定相同。 field_buffer
的来源是阅读此类详细信息的地方。
原始 SVr4 联机帮助页的信息量较少 — 例如,请参见 Solaris(参考手册中的教程也好不到哪儿去)。
所以我正在尝试使用 <ncurses>
<form.h>
库
我正在阅读 this man page 告诉我函数:
char *field_buffer(const FIELD *field, int buffer);
return 类型是指向 char *
的指针。在这个指针的末尾,我怀疑是一个包含我想要访问的 chars
的 c 风格数组。
现在我可以谨慎地使用这个函数,并在读取数据时尽量不要越界(它 returns 所有字符都保存在一个字段中,所以我想不要循环超过字段大小是一种谨慎的方法)。但是我没有办法知道 char *
指向的缓冲区指针的大小吗?
我现在才这样读出数据:
char *ptr = fiel_buffer(someField, 0);
size_t dontKnow = 100; //if I had the underlying array arr I would do dontKnow = sizeof(arr) / sizeof(arr[0]
for (size_t i = 0; i < dontKnow; i++)
std::cout << ptr[i] << std::endl;
它没有明确说明,但由于没有指向长度参数的指针允许库 return 作为副作用的字符串长度,您有空终止字符串的 C 约定。
联机帮助页确实是这样说的:
The function field_buffer returns a pointer to the contents of the given numbered buffer:
- The buffer contents always have the same length, and are padded with trailing spaces as needed to ensure this length is the same.
- The buffer contents are set with
set_field_buffer
, or as a side effect of any editing operations on the corresponding field.
和
The function
set_max_field
sets the maximum size for a dynamic field.
(另一个联机帮助页中提到了动态字段,form_field_info)。
实际上,“始终相同的长度”适用于该字段使用的列数。如果您存储了多字节字符串 (UTF-8),则每个缓冲区的字节数不一定相同。 field_buffer
的来源是阅读此类详细信息的地方。
原始 SVr4 联机帮助页的信息量较少 — 例如,请参见 Solaris(参考手册中的教程也好不到哪儿去)。