Jump to content
Sign in to follow this  
skinie18

Variavel por referencia

Recommended Posts

skinie18

Boas o meu problema e que nao percebo muito de structs mas o que eu queria era passar um vetor por referencia para uma funçao e o main recebesse de volta o vector modificado, ou seja mais o menos isto:

typedef struct id {
    char name[10];
    char pass[10];
} ID;

ID verify(ID conf[50], int i) {
    printf("Insert Name: ");
    scanf("%s", conf[i].name);
    printf("Insert Pass: ");
    scanf("%s", conf[i].pass);
    return conf;
}

int main(int argc, char** argv) {
    ID conf[50];
    int i;

    conf = verify(conf, i);
    i++;
    
    printf("%s \n", conf[i].name);
    printf("%s \n", conf[i].pass);

    return (EXIT_SUCCESS);
}

Share this post


Link to post
Share on other sites
Baderous

Apenas tens de alterar o cabeçalho da função verify para:

ID verify(ID *conf, int i, int len)

One len será o tamanho do vector (50). Invocas assim:

verify(conf,i,50)

EDIT: Ao passares o vector por referência não precisas de fazer return dele porque ele é alterado na própria função, e essas alterações são verificadas na main.

Share this post


Link to post
Share on other sites
Baderous

Tens razão, não precisas. Só precisavas se quisesses percorrer o array até ao seu limite, por exemplo.

Share this post


Link to post
Share on other sites
bubulindo

Tens razão, não precisas. Só precisavas se quisesses percorrer o array até ao seu limite, por exemplo.

E não tivesses o \0 na última posição. :\


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
Baderous

E não tivesses o \0 na última posição. :\

Isso só se verifica para strings, o que não é este caso.

Share this post


Link to post
Share on other sites
skinie18

fiz as alteraçoes e nao funciona de fora correcta:

typedef struct id {
    char name[10];
    char pass[10];
} ID;

ID verify(ID *conf, int i) {
    printf("Insert Name: ");
    scanf("%s", conf[i].name);
    printf("Insert Pass: ");
    scanf("%s", conf[i].pass);
}

int main(int argc, char** argv) {
    ID conf[50];
    int i;

    verify(conf, i);
    i++;

    printf("%s \n", conf[i].name);
    printf("%s \n", conf[i].pass);

    return (EXIT_SUCCESS);
}

Share this post


Link to post
Share on other sites
jpedro20

Tens que inicializar o i. Tás a colocar na posição i sem ainda o teres definido.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.