C 如何确定字符串长度?

C 如何确定字符串长度?,c,string,string-length,C,String,String Length,我一直很想知道如何决定字符串长度? 当我问我的老师这个问题时,他回答说:“你必须假设一个值并分配给srting。” 这最终把我推向了我最初的问题:如何为字符串设定一个特定的长度。我过去常常考虑内存分配,也就是说,我们通常都在写 char str[50] = "Hello world"; 在这里,编译器为stringstr分配了50字节的内存,但只会使用10字节,剩余的40字节将被浪费 那么,在用户输入字符串之后,有没有办法分配内存呢 我们过去最多只给20到30个输入,所以剩下的就浪费了 对。你

我一直很想知道如何决定字符串长度?
当我问我的老师这个问题时,他回答说:“你必须假设一个值并分配给srting。”
这最终把我推向了我最初的问题:如何为字符串设定一个特定的长度。我过去常常考虑内存分配,也就是说,我们通常都在写

char str[50] = "Hello world";
在这里,编译器为string
str
分配了50字节的内存,但只会使用10字节,剩余的40字节将被浪费

那么,在用户输入字符串之后,有没有办法分配内存呢

我们过去最多只给20到30个输入,所以剩下的就浪费了

对。你可以分配多少是没有限制的,但是如果你知道你不需要超过一定数量,那么你可以分配那么多。通常,在现代PC上运行Hello World时,您的内存并不紧张,但如果您在数据库中存储了数百万条带有名称等的记录,那么最好考虑一下内存消耗

我甚至问老师有没有办法可以减小数组的大小 动态地让他回答“不”,请帮忙

您可以动态分配内存。假设您有如下代码:

int n = 30;
char *string = malloc(n);
free(string); // any memory allocated with malloc should be freed when it is not used anymore
现在
string
的大小为
30
,因为
n
就是这样设置的,但它可以是运行时确定的任何其他内容。它可能是用户输入的内容

< C++中有一个构造名为“代码> STD::String < /Cord>”,它自动为您执行动态内存分配。你可以这样做

std::string s = "Hello";
s += " World";

您甚至不必担心内存分配。如果它不适合内部,它将重新分配内存,它是一个已摊销的常数运行时。

只使用<代码> STD::String < /C> >消除很多烦恼,C和C++是两种非常不同的语言,对很多事物具有不同的语义。即使两种语言中的某些内容相同(或几乎相同),请只标记您实际使用的语言。特别是在字符串方面,有些东西有一些细微的差别,在C++中,无论如何都不应该使用C样式字符串。你是在问C还是C++,因为C++中的适当的(<代码> STD::String < /代码>)在C中的C.中不存在,你可能在<代码> SCAN()中得到<代码> M < /C>修改器。和族,自动分配足够的空间。这在类似Unix的机器上并不普遍可用(例如,macOS 10.14 Mojave中不可用),但在可用的地方,它非常有用。如果您想知道是否可以事先确定长度(正如@StoryTeller所怀疑的),那么答案是否。对于如何解决或解决这一问题,现在,语言问题真正起作用了,因为C和C++之间的自然解决方案会有很大的不同。这个问题实际上是不清楚的,只是因为C和C++标记的小错误。我们可以猜测您真正需要的是什么,如果您已经展示了代码,例如一个可以从解决方案提案中受益的程序。