【问题标题】:How to decide string length?如何确定字符串长度?
【发布时间】:2019-01-22 07:05:44
【问题描述】:

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

char str[50] = "Hello world";

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

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

【问题讨论】:

  • 只要用std::string就可以摆脱很多烦恼
  • 首先,C 和 C++ 是两种截然不同的语言,在许多方面具有不同的语义。即使两种语言中的某些内容相同(或几乎相同),也请仅标记您实际编程的那个。尤其是在涉及字符串时,某些内容存在一些细微的差异,而在 C++ 中,永远不应该真正使用无论如何都是 C 风格的字符串。
  • 您要的是 C 还是 C++,因为在 C++ (std:;string) 中合适的内容在 C 中并不存在。在 C 中,您可能在 @987654327 中提供了 m 修饰符@ 和family,它会自动分配足够的空间。这在类 Unix 机器上并不普遍可用(例如,它在 macOS 10.14 Mojave 中不可用),但在可用的地方,它非常有用。
  • 如果您想知道是否可以事先确定长度(正如@StoryTeller 所怀疑的那样),那么答案是否定的。至于如何解决或解决这个问题,现在关于语言的问题真正开始发挥作用,因为自然解决方案在 C 和 C++ 之间非常不同。
  • 这个问题真的不清楚,只是因为标记 C 和 C++ 的小错误。如果您显示了代码,我们可以猜出您真正需要什么,例如minimal reproducible example 可以从解决方案提案中受益的程序。

标签: c string string-length


【解决方案1】:

我们过去常常给输入大约 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";

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

【讨论】:

    猜你喜欢
    • 2021-02-18
    • 2011-09-08
    • 2021-04-20
    • 2012-09-14
    • 2012-07-06
    • 1970-01-01
    • 2011-05-06
    • 2011-05-04
    • 1970-01-01
    相关资源
    最近更新 更多