Ncurses c/c++ - getstr() 未声明的 char 数组
Ncurses c/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 数组获得它的大小?在有人输入他的名字之前,程序可以在不知道这个数组大小的情况下工作吗?我不希望用户输入他名字的长度。我不想自己声明这个数组的大小我想让程序知道它需要创建这个数组的大小。可能吗?想不出别的了。
How do I do so this char array gets its size when user types in what he wants to type?
你不能在 C.
Can program work not knowing size of this array untill someone type his name?
没有。您必须假设名称可能有多大,并为 getstr()
提供足够大的缓冲区。
I don't want user to type in length of his name.
如果缓冲区对于任何名称都足够大,则没有必要。
I don't want to declare size of this array by myself I want program to know what size of this array it needs to create.
如果您事先不知道数组的大小,您的程序也不知道。
Is it possible?
没有
如果您使用从终端读取 returns 正确长度的字符串的高级语言进行编程,那么正在发生的事情 "under the covers" 是将输入读入一个大缓冲区,然后复制到返回给您的正确长度的动态分配字符串。只需要一个 "large buffer" 就可以被所有的输入调用所使用,你永远不需要考虑它。
然而,在 C 中,作为一种漂亮的 low-level 语言,你基本上必须自己做这件事,所以当你从终端读取输入时,一个管道,或套接字等,在读取输入之前,您通常无法判断输入有多大,因此您必须将其读入缓冲区 "manually" pre-sized 才能足够大.
虽然不是一个完美的解决方案(有微妙的理由不这样做),如果你 #include <limits.h>
然后使用 LINE_MAX
作为你的输入缓冲区的大小,你(几乎)保证你的输入缓冲区不能溢出。
我正在用 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 数组获得它的大小?在有人输入他的名字之前,程序可以在不知道这个数组大小的情况下工作吗?我不希望用户输入他名字的长度。我不想自己声明这个数组的大小我想让程序知道它需要创建这个数组的大小。可能吗?想不出别的了。
How do I do so this char array gets its size when user types in what he wants to type?
你不能在 C.
Can program work not knowing size of this array untill someone type his name?
没有。您必须假设名称可能有多大,并为 getstr()
提供足够大的缓冲区。
I don't want user to type in length of his name.
如果缓冲区对于任何名称都足够大,则没有必要。
I don't want to declare size of this array by myself I want program to know what size of this array it needs to create.
如果您事先不知道数组的大小,您的程序也不知道。
Is it possible?
没有
如果您使用从终端读取 returns 正确长度的字符串的高级语言进行编程,那么正在发生的事情 "under the covers" 是将输入读入一个大缓冲区,然后复制到返回给您的正确长度的动态分配字符串。只需要一个 "large buffer" 就可以被所有的输入调用所使用,你永远不需要考虑它。
然而,在 C 中,作为一种漂亮的 low-level 语言,你基本上必须自己做这件事,所以当你从终端读取输入时,一个管道,或套接字等,在读取输入之前,您通常无法判断输入有多大,因此您必须将其读入缓冲区 "manually" pre-sized 才能足够大.
虽然不是一个完美的解决方案(有微妙的理由不这样做),如果你 #include <limits.h>
然后使用 LINE_MAX
作为你的输入缓冲区的大小,你(几乎)保证你的输入缓冲区不能溢出。