gpt4 book ai didi

C 编程 - 传递指向数组的指针

转载 作者:行者123 更新时间:2023-12-04 06:53:35 26 4
gpt4 key购买 nike

如何将指针值传递给结构数组;

例如,在 txt 上我有这个:

John Doe;xxxx@hotmail.com;214425532;

我的代码:
typedef struct Person{
char name[100];
char email[100];
int phone;
}PERSON;

int main(){
PERSON persons[100];
FILE *fp;
char *ap_name;
char *ap_email;
char *ap_phone;
char line[100];
fp=("text.txt","r");
if(fp==NULL){
exit(1);
}
else{
fgets(line,100,fp);
ap_name=strtok(line,";");
ap_email=strtok(NULL,";");
ap_phone=strtok(NULL,";");
}
return 0;
}

我的问题是如何将 ap_name、ap_email、ap_phone 的值传递给结构?
而且,我需要使用所有这些指针吗?

最佳答案

姓名和电子邮件相对容易;只需使用 strcpy (或 strncpy);

strncpy(persons[i].name, ap_name, sizeof persons[i].name - 1);

这将复制 ap_name 指向的字符串的内容。进入结构的名称字段。最多 sizeof persons[i].name - 1 (100 - 1, or 99) 个字符将被复制到 persons[i].name , 如果 ap_name 指向的字符串长度小于该值,则附加 99 - strlen(ap_name) 空字符(ASCII 0)。电子邮件也一样:
strncpy(persons[i].email, ap_email, sizeof persons[i].email - 1);

请注意,这假定 ap_name 和 ap_email 的长度将始终小于目标缓冲区;正如所写,您的代码几乎可以保证这一点,但额外的健全性检查可能不是一个坏主意。

至于电话号码,假设您要存储区号或分机号(语言标准保证的最小范围是 [-32767,32767])。更何况电话号码一般都是用非数字字符来表示的,比如 (999)-999-9999 .您可能还希望将此信息存储为字符串。

编辑

电话号码的另一种替代方法是使用更宽的数字类型(最好是无符号的):
struct PERSON {
...
unsigned long phone;
...
};

然后使用 strtoul() 转换字符串:
persons[i].phone = strtoul(ap_phone, NULL, 10);
strtoul()库函数将数字的字符串表示形式转换为等效的数值。

关于C 编程 - 传递指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775611/

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