无法在结构中输出字符
can't output char in Struct
#include <iostream>
using namespace std;
struct Flight {
char flightNumber[6];
int depHour;
int depMin;
};
int main() {
char flightNumber[6];
int depHour;
int depMin;
cin.getline(flightNumber, 6);
cin >> depHour;
cin >> depMin;
Flight f = {.flightNumber = flightNumber[6], .depHour=depHour , .depMin= depMin};
cout << f.flightNumber << " " << f.depHour << " " << f.depMin << endl;
return 0;
}
无论我在航班中输入什么,都没有显示。编译没有错误,但无法输出 flightNumber。它是空的。知道问题是什么吗?
.flightNumber = flightNumber[6]
这将复制索引 6 处的字符。这在数组上是越界的。因此是未定义的行为。同样的 bug 还可能导致您打印未以 null 结尾的字符串,这也会导致未定义的行为。
您需要使用某种形式的strncpy()
话虽如此...我很惊讶这在没有警告的情况下编译(它在 clang 上对我来说确实如此(。
正确的代码版本 1:
#include <iostream>
using namespace std;
struct Flight {
char flightNumber[6];
int depHour;
int depMin;
};
int main() {
char flightNumber[6];
int depHour;
int depMin;
cin.getline(flightNumber, 6);
cin >> depHour;
cin >> depMin;
Flight f = {.depHour=depHour , .depMin= depMin};
strcpy(f.flightNumber, flightNumber);
cout << f.flightNumber << " " << f.depHour << " " << f.depMin << endl;
return 0;
}
正确的代码版本 2:
#include <iostream>
using namespace std;
struct Flight {
Flight(char *flightNumber_, int depHour_, int depMin_): depHour(depHour_), depMin(depMin_) {
strcpy(flightNumber, flightNumber_);
}
char flightNumber[6];
int depHour;
int depMin;
};
int main() {
char flightNumber[6];
int depHour;
int depMin;
cin.getline(flightNumber, 6);
cin >> depHour;
cin >> depMin;
Flight f(flightNumber, depHour, depMin);
cout << f.flightNumber << " " << f.depHour << " " << f.depMin << endl;
return 0;
}
笔记:
- 不要像我一样使用
strcpy()
。使用strncpy()
和验证代码,以确保复制不会超过分配的数组的长度。 -
std::string
是 C++ 中的一个可爱的类型。
相关文章:
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 字符的输入/输出操作
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- C++输出奇怪的字符而不是数字 (Windows)
- 如何存储 unicode 字符并将其输出到文件?
- C++中附加的字符*的奇怪输出
- 来自无符号字符缓冲区的虚拟输出
- 将未签名的字符写入输出文件
- 在大小为 10 的 char 数组中输入超过 10 个字符的字符串并输出时,它会显示整个数组而不是前 10 个数组.为什
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?
- 字符数组到十六进制字符串的转换 - 意外输出
- 存储和打印字符,但输出不是预期的
- 在函数中连接两个字符,并在 C++ 中返回输出
- 为什么要更改这两个代码的输出"&"字符?
- 输出字符时出现分段错误**
- 如何输出字符**
- C ++中的输出字符数组会产生奇怪的符号
- 输出字符的ASCII值
- 输出字符文字 { 以流C++
- 无法在结构中输出字符