如何从指向结构的指针的字符数组输出一个完整的字符串

how to output a whole string from char array from pointer which points to structure

本文关键字:一个 字符串 输出 数组 结构 字符 指针      更新时间:2023-10-16

不好意思问,但我不明白为什么我只得到guests->name在输出中的第一个字符?如何打印整个字符串?

#include <iostream>
using namespace std;
struct name_table {
    char name[20];
};
int main(){
    name_table *guests = new name_table;
    cout << "Please enter the the line:";
    cin.get(guests->name, 20);
    cout << "Okay, the line saved: " << *(guests)->name << endl;;
    cin.get();
    return 0;
}

谢谢

*(guests)->name
^^^^^^^^^^^^^^^
|^^^^^^^^^^^^^^
|      |
| guests->name
|      |
|  a char[20]
|      |
| becomes char*
| when passed into
|  operator<<
|

dereference

对指针解引用可以得到一个单独的char

tl;dr:您正在打印单个字符

你可以写:

guests->name

std::cin已经足够聪明,可以将char*视为c字符串,并逐字符迭代打印整个字符串。

然而,我建议阅读std::string;在c++中,你不需要乱搞原始字符数组。而且,你有内存泄漏,动态分配是完全没有必要的。

我会这样做:

#include <iostream>
#include <string>
int main()
{
   std::string name_table;
   std::cout << "Please enter the the line: ";
   std::getline(std::cin, name_table);
   std::cout << "Okay, the line saved: " << name_table << std::endl;
}

guests是指向结构体的指针。在输出*(guests)->name中,同时使用*->运算符,它们的求值如下:

  • (guests)->name首先访问指针guests后面的对象的name成员。

  • 然后使用*运算符对得到的char数组进行解引用,得到单个char

所以你真正想要的是以下内容之一:

  • 删除*,括号可以删除: guests->name,就像你在cin.get行所做的那样。

  • 或者将*放在括号中取消对guests的引用,然后使用.操作符(而不是->)访问成员:(*guests).name

您必须删除计数行中的*。

cout << "Okay, the line saved: " << (guests)->name << endl;
相关文章: