sách gpt4 ai đã đi

Lập trình C - Truyền con trỏ vào mảng

In lại 作者:行者123 更新时间:2023-12-04 06:53:35 26 4
mua khóa gpt4 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,";");
}
trả về 0;
}

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

1 Câu trả lời

姓名和电子邮件相对容易;只需使用 chuỗi (或 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 .您可能还希望将此信息存储为字符串。

biên tập

电话号码的另一种替代方法是使用更宽的数字类型(最好是无符号的):
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
Bài viết được đề xuất: visual-studio-code - VSCode 和 ES6 警告
Bài viết được đề xuất: react-native - React Native Expo.Font.loadAsync 不加载 Material 图标
Bài viết được đề xuất: php - 如何让 symfony 将所有内容转储到屏幕上
Bài viết được đề xuất: 另一个目录中的 git-diff
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com