从 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(参考手册中的教程也好不到哪儿去)。