gpt4 book ai didi

c++ - Ncurses c/c++ - getstr() 未声明的 char 数组

转载 作者:太空宇宙 更新时间:2023-11-04 13:07:11 25 4
gpt4 key购买 nike

我正在用 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?

没有。

如果您正在使用从终端读取并返回正确长度的字符串的高级语言进行编程,那么“幕后”发生的事情是将输入读入一个大缓冲区,然后动态复制到一个返回给您的正确长度的分配字符串。只需要一个“大缓冲区”就可以供所有输入调用使用,您永远不需要考虑它。

然而,在 C 中,作为一种非常低级的语言,您基本上必须自己完成此操作,因此当您从终端、管道或套接字等读取输入时,在读取输入之前,您通常无法判断输入有多大,因此您必须将其读入缓冲区,该缓冲区已“手动”预先设置为足够大。

虽然这不是一个完美的解决方案(有微妙的理由不这样做),但如果您 #include <limits.h>然后使用 LINE_MAX对于输入缓冲区的大小,您(几乎)可以保证输入缓冲区不会溢出。

关于c++ - Ncurses c/c++ - getstr() 未声明的 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41666988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com