gpt4 book ai didi

c++ - 为什么以及何时我们必须在 C++ 中使用之前初始化字符串?

转载 作者:行者123 更新时间:2023-11-28 00:30:19 25 4
gpt4 key购买 nike

我正在阅读一些 C++ 教程,发现有时会初始化一个字符串(“初始化”可能不是正确的术语),有时则不会。

为什么以及什么时候?

我正在阅读的代码是:

char name[50];
char lastname[50];
char fullname[100];
...
cin.getline ( name, 50 );
...
cin.getline ( lastname, 50 );
fullname[0] = '\0'; // strcat searches for '\0' to cat after
strcat ( fullname, name ); // Copy name into full name
strcat ( fullname, " " ); // We want to separate the names by a space
strcat ( fullname, lastname ); // Copy lastname onto the end of fullname

有人请解释一下。

最佳答案

在C++中,有char name[50]这样的字符数组,也有std::string这样的字符串类。

字符数组根据与 C 中相同的规则进行初始化——也就是说,如果它们是堆栈变量,则它们不会被初始化,如果它们是静态/全局变量,则它们在加载时被初始化为零——那里然而,异常是基于系统细节的,所以最好假设它们从未被初始化。

字符串类(如 std::string)被初始化为对象构造函数阶段的一部分——因此它们总是被初始化。

在您的特定代码中,您使用的是固定长度的字符数组。它们通常以空值终止,但它们可能并不总是——特别是 cin.getline ( name, 50 ); 将读取完整的 50 个字符,如果有 49 个字符,它将使数据以空值终止或更少的输入,但由于没有超过 50 个字符的空间,如果有 50 个或更多字符,它不会 null 终止——这对你的 strcat 有影响,因为 strcat 假设数据以 null 结尾——您必须使用 strncat 来确保代码安全。

关于c++ - 为什么以及何时我们必须在 C++ 中使用之前初始化字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23208230/

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