gpt4 book ai didi

C++指针数组结构

转载 作者:行者123 更新时间:2023-11-28 01:41:15 26 4
gpt4 key购买 nike

#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 的输出,而不是其他任何东西,但如果我不初始化电话号码,我就会得到名字的输出。

最佳答案

struct 存储在连续的内存位置,因此当您分配tno 变量时,会尝试获取大于其边界大小的数据要存储在其中,剩余的位会添加到下一个内存位置

在你的代码中 tno [9],所以它可以存储 ma​​x 9 个字符,尽管你给它 9 个字符 而已,但是 strcpy 所做的是它还将 \0 添加到末尾,它尝试将它添加到 tno [10]不存在并超出范围并将其存储在其他内存位置,可能是下一个数组的位置,这会导致未定义的行为。

你只需要改变结构定义如下:

struct telephone
{
char name[10];
char tno[10]; // if you intend to store 9 digit number
};

请记住,如果您打算在字符数组中存储x 个字符,那么您的数组的大小必须是x + 1。如果使用字符数组似乎很困难,也许你可以使用 std::string

关于C++指针数组结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47069713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com