首页 > 解决方案 > 如何确定字符串长度?

问题描述

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

char str[50] = "Hello world";

这里编译器为字符串分配了 50 个字节的内存,str但只使用了 10 个字节,剩余的 40 个字节被浪费了。

那么有没有什么办法可以在用户输入字符串后分配内存呢?

标签: cstringstring-length

解决方案


我们曾经给输入大约 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自动为您分配动态内存的构造。你可以做类似的事情

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

你甚至不必担心内存分配。如果它不适合内部,它将使用摊销常量运行时自行重新分配内存。


推荐阅读