如何从指向结构的指针的字符数组输出一个完整的字符串
how to output a whole string from char array from pointer which points to structure
不好意思问,但我不明白为什么我只得到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;
相关文章:
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 如何检查一个c++字符串中有多少相同的字符/数字
- 获取用C/C++打印的最后一个字符串
- cin >> int 给定一个字符串将 int 赋值为 0
- 我如何通过引用将 c++ 字符串分配给另一个字符串
- 使用另一个字符串从字符串中删除空格
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- C++为 void 指针分配一个字符串
- 如何在使用 getch 后在另一个字符串的末尾连接一个字符串
- 给定一个单词数组和一个字符串,如何计算给定字符串中的所有单词
- 如何在另一个字符串的x位置插入一个字符串?
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 在另一个字符串中插入文件扩展名之前的字符串
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- C++自定义流操纵器,用于更改流上的下一个字符串
- 从类返回一个字符串 — 奇怪的行为
- 从我的2d数组中的一列返回的字符串值被压缩为一个字符串(在Mac os上打开Windows txt文件)
- 你能从"volatile const char*"构造一个字符串吗?(不使用`const_cast`