Programação Progressiva

Fórum para dúvidas dos sites: Programação Progressiva, Java Progressivo, C Progressivo


Você não está conectado. Conecte-se ou registre-se

String como parâmetro

Ir em baixo  Mensagem [Página 1 de 1]

1 String como parâmetro em Seg Jun 29, 2015 2:52 am

Pessoal, boa noite! Eu tenho uma struct, uma função e o main. Eu quero passar uma string como parâmetro para uma função que atribui a string passada para o valor da struct e imprime o que foi colocado lá. Eu implementei isso:

Código:
#include<stdio.h>
#include<stdlib.h>

struct Teste
{
    char alguem[100];
};

void imprime(char *nome);

int main()
{

    char nome[100];

    printf("Informe o nome: ");
    scanf("%100[^\n]s", nome);

    imprime(nome);
}


void imprime(char *nome)
{
    struct Teste *t;
    t->alguem = nome;
    printf("O nome passado por paramentro eh: %s", t->alguem);
}

Mas dá o seguinte erro: "|26|error: incompatible types when assigning to type 'char[100]' from type 'char'|".

Como eu faço isso? O que há de errado no código?

Desde já, muito obrigado!

Ver perfil do usuário

2 Re: String como parâmetro em Qui Jul 02, 2015 10:05 pm

Então, Silva Júnior, é que em C você não pode fazer essa atribuição direta (com strings):
Código:
t->alguem = nome;

Tem que usar uma função, por exemplo:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Teste
{
    char alguem[100];
};

void imprime(char *nome);

int main()
{
    char nome[100];

    printf("Informe o nome: ");
    scanf("%100[^\n]s", nome);

    imprime(nome);

    return(0);
}

void imprime(char *nome)
{
    struct Teste t;

         // strcpy declarada no arquivo string.h
    strcpy(t.alguem, nome);  // serve pra isso

    printf("O nome passado por paramentro eh: %s", t.alguem);
}

E você declarou "t" como um ponteiro do tipo "Teste",
mas não se esqueça que ponteiros tem que apontar pra alguma coisa.
Tipo:
Código:
void imprime(char *nome)
{
    struct Teste *t,
                  t2;

    t = &t2; // agora sim que t está apontando para t2

    strcpy(t->alguem, nome);  // você pode usá-lo

    printf("O nome passado por paramentro eh: %s", t2.alguem);
}

Ou também:
Código:
void imprime(char *nome)
{
    struct Teste *t;
                          // alocando memória dinamicante
    t = (struct Teste *)malloc(sizeof(struct Teste));

    strcpy(t->alguem, nome);

    printf("O nome passado por paramentro eh: %s", t->alguem);
}

É isso. Very Happy

Ver perfil do usuário

3 Re: String como parâmetro em Qui Jul 02, 2015 10:58 pm

Obrigado pelo retorno AbnerRMS!

Ver perfil do usuário

Conteúdo patrocinado


Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum