c - 如何确定字符串长度?
问题描述
我一直很想知道如何确定字符串长度?
当我问我的老师时,他回答说“你必须假设一个值并分配给 srting”。
这最终将我推向了我最初的问题,即如何假设字符串的特定长度。我曾经考虑过内存分配,即我们通常写
char str[50] = "Hello world";
这里编译器为字符串分配了 50 个字节的内存,
str
但只使用了 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
自动为您分配动态内存的构造。你可以做类似的事情
std::string s = "Hello";
s += " World";
你甚至不必担心内存分配。如果它不适合内部,它将使用摊销常量运行时自行重新分配内存。
推荐阅读
- amazon-web-services - 如何将无服务器 Step Function/状态机/Lambda 构建嵌套到现有的 AWS CloudFormation ElasticBeanstalk 应用程序中?
- logout - 注销问题 Codecharge - 从一个应用程序注销
- python - 在这个 Python 代码片段中调用函数中的函数是如何工作的?
- neural-network - 在 DNN 中应用批规范与仅使用权重和偏差有什么区别?
- node.js - TypeError [ERR_INVALID_OPT_VALUE]:对于选项“主机名”无效
- scala - 包对象可以在scala中有一个apply方法吗?
- r - 将 R 中的向量按特定顺序转换为下/上三角矩阵
- javascript - 如何使用自定义复选框制作表单,将我定向到提交表单上的不同 html 文件?
- r - 计算数据框中多列的特定值序列的数量
- java - 解决 GRADLE 中“无法将 MANIFEST.MF 添加到 ZIP”错误的解决方案