Как определить, использовать ли указатель или нормальную переменную в аргументе функции? - PullRequest
0 голосов
/ 27 января 2019
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct contact {
    char name[30];
    int phone_number;
    char address [30];
};

int main(int argc, char **argv) {
    struct contact friend;
    strcpy(friend.name, "Jane Doe");
    friend.phone_number = 377177377;
    strcpy(friend.address, "3771 University Avenue");

    char *name;
    int number;
    char *address;

    update_contact(&friend, name, number, address);
    return 0;

}

Мне нужно реализовать функцию update_contact для обновления контактной информации.friend и number являются нормальными переменными.*name и *address являются указателями.Но для вызова функции также используется адрес указателя friend, который равен &friend.Теперь я очень озадачен тем, что я должен добавить в параметры функции.

Я пытался вставить указатели.

void update_contact (struct *c, char *name, int number, char *address) {
    c->name = name;
    c->phone_number = number;
    c->address = address;
}

Однако это приводит к множеству ошибок, таких как

error: request for member 'address' in something not a structure or union
&c->address = address;

Как я могу это исправить?Спасибо

Это исправленная версия.Спасибо Томас Джагер и немного имени.

void update_contact (struct contact *c, char *name, int number, char *address) {
    strcpy(c->name, name);
    c->phone_number = number;
    strcpy(c->address, address);
}

Ответы [ 2 ]

0 голосов
/ 27 января 2019

В функции update_contract,

  1. заменить struct на struct contact
  2. использовать strcpy

следующим образом

void update_contact(struct contact *c, char *name, int number, char *address) {
    strcpy(c->name, name);
    c->phone_number = number;
    strcpy(c->address, address);
}

0 голосов
/ 27 января 2019

Как предложил Дэвид С. Ранкин:

Вам нужно инициализировать переменные, переданные в качестве параметров.Например,

char *name = "Donald Trump";
int number = 01010101010;
char *address = "White House;

char name[] = "Donald Trump";
int number = 01010101010;
char address[] = "White House;

или вы можете использовать литералы и константы при вызове функции

  update_contact(&friend, "Donald Trump", 0101010010, "White House");

void update_contact (struct contact *c, char *name, int number, char *address) {
    strcpy(c->name, name);
    c->phone_number = number;
    strcpy(c->address, address);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...