Ncurses c/getstr()未声明的char数组
Ncurses c/getstr() non declared char array
我正在Ncurses中编写一个小项目。我有问题的地方有代码。
#include <curses.h>
int main()
{
char *name;
initscr();
printw("Set your name: ");
getstr(name = new char[sizeof name]);
printw("Name: %s", name);
getch();
endwin();
return 0;
}
我知道这个代码不起作用。当用户键入他想要键入的内容时,我该如何使这个char数组获得其大小?在有人输入他的名字之前,程序可以在不知道这个数组大小的情况下工作吗?我不希望用户输入他的名字的长度。我不想自己声明这个数组的大小,我想让程序知道它需要创建的数组的大小。有可能吗?想不出其他什么了。
当用户键入他想要键入的内容时,我该如何使这个char数组获得其大小?
您不能在C中使用。
在有人键入他的名字之前,程序可以在不知道这个数组的大小的情况下工作吗?
否。您必须假设一个名称可能有多大,并为getstr()
提供一个足够大的缓冲区。
我不希望用户输入他的名字的长度。
如果缓冲区足够大,可以容纳任何名称,则没有必要这样做。
我不想自己声明这个数组的大小,我想让程序知道它需要创建这个数组的多少大小。
如果你事先不知道数组的大小,你的程序也不能。
有可能吗?
否。
如果您使用从终端读取并返回正确长度字符串的高级语言进行编程,那么"隐藏"的情况是,输入被读取到一个大缓冲区中,然后复制到一个动态分配的正确长度字符串中,然后返回给您。只需要有一个"大缓冲区"就可以被所有的输入调用使用,而且你永远不需要考虑它
然而,在C中,作为一种相当低级的语言,你基本上必须自己完成这项工作,所以当你从终端、管道或套接字等读取输入时,你通常无法在读取之前判断输入的大小,所以你必须将其读取到一个缓冲区中,该缓冲区已经"手动"预先调整大小,使其足够大。
虽然这不是一个完美的解决方案(有一些微妙的原因不这样做),但如果#include <limits.h>
然后使用LINE_MAX
来确定输入缓冲区的大小,则(几乎)可以保证输入缓冲区不会溢出。
- #ifdef和未声明的标识符
- 未声明的标识符编译暗黑破坏神 2 程序"muleview"
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- 在气泡排序程序中未声明错误功能
- 我在范围内未声明的错误类有问题
- 使用未声明的标识符"sqrt"?
- 我包含了<winuser.h>,但编译器在MonitorFromWindow上抛出"未声明"
- 对类 (C++) 中的私有变量使用未声明的标识符
- 我的代码中有错误,未声明的标识符
- 未定义的标识符/未声明
- 错误:在 C++ 'std'使用未声明的标识符
- 在编译器之前检测未声明的标识符
- 使用未声明的标识符'temp'
- 使用未声明的标识符"yylex"和"yyin"?
- 使用"class"关键字,后跟未声明的标识符
- 未声明的标识符错误,但变量定义正确 (?)
- C++ [错误] 声明'char '隐藏参数。什么意思?
- 在此范围C 中未声明字符串和char变量
- Ncurses c/getstr()未声明的char数组