【发布时间】:2017-11-02 07:22:51
【问题描述】:
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
struct telephone
{
char name[10];
char tno[9];
};
void main()
{
telephone a[5];
clrscr();
telephone* p;
p = a;
strcpy(a[0].name, "Aditya"); // initializing the array
strcpy(a[1].name, "Harsh");
strcpy(a[2].name, "Kartik");
strcpy(a[3].name, "Ayush");
strcpy(a[4].name, "Shrey");
strcpy(a[0].tno, "873629595");
strcpy(a[1].tno, "834683565");
strcpy(a[2].tno, "474835595");
strcpy(a[3].tno, "143362465");
strcpy(a[4].tno, "532453665");
for (int i = 0; i < 5; i++)
{
puts((p+i)->name);cout<< " "; //command for output
puts((p+i)->tno );cout<<endl;
}
getch();
}
在这段代码中,在获取输出时,我没有得到名称的输出。我只得到(p+0)->name 的输出而不是其他任何东西,但是如果我不初始化电话号码,那么我会得到姓名的输出。
【问题讨论】:
-
用例如
char tno[9]你有一个 八个 个字符的“字符串”。请记住,C++ 中的char字符串实际上称为 null-terminated 字节字符串。不要忘记终止符的空间,否则您将超出界限并拥有undefined behavior。 -
为什么要使用
p?表达式(p + i)->name等于p[i].name当然与a[i].name相同。 -
请考虑切换到
std::string而不是c-strings,以及cout而不是puts。智能指针而不是原始指针。并且还可以考虑切换到一些新的 IDE。 -
include<iostream.h>使用本世纪的编译器。
标签: c++ arrays pointers struct