c++ - 无法在 Struct 中输出 char

标签 c++

#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 = flightNumber[6]

复制索引 6 处的字符。这是数组的边界。因此是未定义的行为。同样的错误也可能导致您打印一个未以 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++ - 无法在 Struct 中输出 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25597922/

相关文章:

c++ - Windows 10 标题栏不工作

C++ 原子增量内存排序

c++ - 如何链接使用 C++ vector 的 iOS 静态库,以便在 Delphi XE7 中使用?

javascript - SpiderMonkey 编译错误

c++ - Windows 7 中的 COleTemplateServer::RegisterAll() 会发生什么

c++ - 使用 GPU 时 OpenCL 程序卡住

c++ - 线程 c++11 标准和 Netbeans/其他 IDE

c++ - NULL 与抛出和性能

c++ - 如何从 QWebView 中的输入字段获取值

c++ - 存储一组不同类型的数组