Ir para conteúdo
marciniak

Ajuda! - Preenchimento de string através de função

Recommended Posts

Salve!
Estou tentando escrever em uma string (ponteiro alocado dinamicamente) através de uma função alimentada por um ponteiro
Codigo de exemplo:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void teste (char *str)
{
    str = (char*)malloc(sizeof(char)*(strlen("teste")));
    strcpy(str, "teste");

    printf("%s", str);
}

int main()
{
    char *str1 = NULL;

    teste(str1);

    printf("|%s", str1);

    return 0;
}

 

A intenção é que a saída seja algo do tipo:

teste|teste

porém o resultado é:

teste|(null)

 

Acredito que por estar enviando como referência o str1 ele deveria ser alterado pela função, e portanto permanecer como o mesmo valor de str (que aponta para ele), porém isso não acontece.
Como deveria proceder para conseguir o resultado desejado?

Agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Raf4Killer
      #include<stdio.h> #include<stdlib.h> #include<string.h> //Biblioteca para usar a funçao strcmp #include<windows.h> #include<conio.h> #include<locale.h> #define P 50 #define N 2 struct elevador{ char pavimento[P] [50]; char *senha,*validarsenha; char nomepav[P] [50], nao; int andar,com,sem; }; static int linha; typedef struct elevador Televador; Televador pavimentos [P]; // salva os dados int indice; char x [P] [50]; int op,i,com; char *LerSenha(int); void cadastrar(); void nomes(); void senhas(); void validar(); void relatorio(); void nomepesquisa(); char pesquisaNomes[P]; int main(){ setlocale(LC_ALL,"portuguese"); indice = 0; do{ printf("\t\t****Menu****\n\n"); printf("1-Cadastar a quantidade de pavimento.\n"); printf("2-Cadastar os nomes dos pavimentos.\n"); printf("3-Cadastar senha.\n"); printf("4-Validar senha.\n"); printf("5-Relatório.\n"); printf("6-Finalizar.\n"); printf("Escolha uma das opções do menu: "); scanf("%d",&op); switch(op){ case 1: //pavimento. system("cls"); cadastrar(); break; case 2: //nome do pavimento. system("cls"); nomes(); break; case 3: //senha do pavimento. system("cls"); senhas(); printf("\n"); break; case 4: validar(); break; case 5: system("cls"); relatorio(); break; } }while(op != 6 ); system("PAUSE"); return 0; } char *LerSenha(int max){ int i; char *senha = (char *)malloc(sizeof(char) *max); while( (* (senha + i++) = getch()) != 13 && i < max) putchar ('*'); return senha; } Televador cadastro; void cadastrar(){ // tipo elevador cadastro : onde guarda os dados //guarda os dados. fflush(stdin); do{ printf("Informe a quantidade de pavimentos:"); scanf("%d",&cadastro.andar); if(cadastro.andar < N){ printf("A quantidade inválida.\n"); } }while(cadastro.andar < N); //onde está salvando os dados; pavimentos [indice] = cadastro; indice ++; } void nomes(){ fflush(stdin); for(i=0;i<cadastro.andar;i++){ printf("Digite o nome do pavimento (%d): ",i+1); //informa qual linha vai ler scanf("%s", &cadastro.nomepav[i]); pavimentos [indice] = cadastro; indice++; } } void senhas(){ fflush(stdin); printf("Qual o nome do pavimento você deseja ir:"); scanf("%s", &pesquisaNomes); for(i=0;i < cadastro.andar;i++){ if(strcmp(cadastro.nomepav[i], pesquisaNomes)==0){ printf("%s encontrado\n",cadastro.nomepav[i]); printf("Deseja inserir senha no pavimento (%d) ?\n", i+1); printf("(s)-sim\n"); printf("(n)-não\n"); scanf("%c",&cadastro.nao); if(cadastro.nao == 'n' ||cadastro.nao == 'N'){ printf("ok\n"); cadastro.sem = i; } else if(cadastro.nao == 's' || cadastro.nao == 'S'){ printf("Digite sua senha:"); cadastro.senha = LerSenha(6); cadastro.com = i; } } else{ printf("Nome não encontrado!\n"); } break; } } void validar(){ for(i=0;i<cadastro.andar;i++){ cadastro.validarsenha = cadastro.senha; } } void relatorio(){ printf("Pavimentos com senha é: %d\n",pavimentos[indice].com); printf("Pavimentos sem senha é: %d\n",pavimentos[indice].sem); printf("pavimentos cadastrados: %d\n",pavimentos[indice].andar); printf("nome dos pavimentos: %s\n",pavimentos[indice].nomepav); }  
    • Por tony_lu
      Ola pessoal, tenho um conteudo em html que preciso enviar via email, porém queria gravar este codigo html dentro de uma variavel, como eu faço...precisava de um exemplo por favor!
       
      Obrigado!
    • Por Doloblan
      Peguei esse codigo da internet, e estou tentando modificar ele para ficar do jeito que preciso, peguei ele sem funcao e preciso de funcao para cada acao e apos criar a funcao de cadastro apenas para teste nao salva a variavel no arquivo binario.
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      struct Contato{
        char nome[100];
        int  telefone;
      };
      struct Contato *agenda;
      FILE *fp;
      int cadastra(int n, int cap){
          fp = fopen("xxx.dat","a+b");
          if(n == cap){
              cap *= 2;
              agenda = realloc(agenda, sizeof(struct Contato)*cap);
          }
          printf("Digite o nome: ");
          scanf(" %[^\n]", agenda[n].nome);
          printf("Digite o telefone: ");
          scanf("%d", &agenda[n].telefone);
          fwrite(agenda, sizeof(struct Contato), n, fp);
          fclose(fp);
          return n++;
      }
      int main(){
          int cap; 
          int n;  
          int opc; 
          int i;
          struct Contato *agenda;
          FILE *fp;
          
          fp = fopen("xxx.dat","rb");
          printf("N; %d \n", n);
          if(fp==NULL){
              n = 0; 
              cap = 20; 
              agenda = (struct Contato *)malloc(sizeof(struct Contato)*cap);
          }
          else{ 
              fread(&n, sizeof(int), 1, fp);
              cap = n*2; 
              agenda = (struct Contato *)malloc(sizeof(struct Contato)*cap);
              fread(agenda, sizeof(struct Contato), n, fp);
              fclose(fp);
          }
        
          do{
              printf("*** Menu ***\n");
              printf("1) Cadastrar contato.\n");
              printf("2) Exibir contatos.\n");
              printf("3) Apagar.\n");
              printf("4) Sair.\n");
              scanf("%d",&opc);
              switch(opc){
                     case 1:
                         printf("n %d\n", n);
                         n = cadastra(n, cap);
                         printf("n %d\n", n);
                  break;
              }
          if(opc==2){
              for(i=1; i<4; i++){
                  printf("*** Contato %d ***\n",i+1);
                  printf("Nome: %s\n",agenda.nome);
                  printf("Telefone: %d\n",agenda.telefone);
              }
              printf("N; %d \n", n);
          }
          else if(opc==3){
              char nome[100];
              int j;
              scanf("%s",&nome);
              for(i=0; i<n; i++){
                  if (strcmp(agenda.nome, nome)==0){
                      for(j=i+1; j<n; j++){
                              strcpy(agenda[j-1].nome,agenda[j].nome);
                              agenda[j-1].telefone=agenda[j].telefone;
                      }
                  n--;
                  i=n;
                  }
              }
          }
          }while(opc!=4); 
          
          if(n>0){
          fp = fopen("xxx.dat","wb");
          fwrite(&n, sizeof(int), 1, fp);
          fwrite(agenda, sizeof(struct Contato), n, fp);
          fclose(fp);
          }
          free(agenda);
        
        return 0;
      }
    • Por Giovani Silva
      Olá, usando o cUrl tenho obtido no retorno uma string conforme mostrado pelo vardump:
       
      string(3236) "21SCJEYPH4M2018-10-09T11:25:07.810-03:0063E12018-10-09T11:25:05-03:00112018-10-01T00:00:00-03:00http://e-gov.betha.com.br/e-nota/visualizarnotaeletronica?link=1539095107817211162506638065523770518713302201024.500.000.000.000.002024.52.00000001036319400{[[Descricao=Anúncio na Internet][ItemServico=0103][Quantidade=1][ValorUnitario=16][ValorServico=16][ValorBaseCalculo=16][Aliquota=2][Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0]][[Descricao=Anúncio 2][ItemServico=0103][Quantidade=1][ValorUnitario=8.5][ValorServico=8.5][ValorBaseCalculo=8.5][Aliquota=2][Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0]]}43215012.21157181640001208586GI SO DA SA PUEVIZAmbiente de testes não requer endereço0SC8888888800114093040Nome aAv S Ped8São Frano4321501RS955600005198225644dids@yahoo.com.br0SCfalse"
       
      Essa string possui o seguinte código fonte
      <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'> <env:Header></env:Header> <env:Body> <ns2:ConsultarLoteRpsEnvioResponse xmlns:ns2="http://www.betha.com.br/e-nota-contribuinte-ws" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#"> <ConsultarLoteRpsResposta> <ListaNfse> <ComplNfse> <Nfse> <InfNfse> <Numero>21</Numero> <CodigoVerificacao>SC5EYOH4M</CodigoVerificacao> <DataEmissao>2018-10-09T11:25:07.810-03:00</DataEmissao> <IdentificacaoRps> <Numero>63</Numero> <Serie>E</Serie> <Tipo>1</Tipo> </IdentificacaoRps> <DataEmissaoRps>2018-10-09T11:25:05-03:00</DataEmissaoRps> <NaturezaOperacao>1</NaturezaOperacao> <OptanteSimplesNacional>1</OptanteSimplesNacional> <Competencia>2018-10-01T00:00:00-03:00</Competencia> <OutrasInformacoes>http://e-gov.betha.com.br/e-nota/visualizarnotaeletronica?link=153909510781721791625066100380655237705187133022010</OutrasInformacoes> <Servico> <Valores> <ValorServicos>24.5</ValorServicos><ValorDeducoes>0</ValorDeducoes><ValorPis>0.00</ValorPis><ValorCofins>0.00</ValorCofins><ValorInss>0.00</ValorInss><ValorIr>0.00</ValorIr><IssRetido>2</IssRetido><ValorIss>0</ValorIss><BaseCalculo>24.5</BaseCalculo><Aliquota>2.0000</Aliquota><DescontoCondicionado>0</DescontoCondicionado><DescontoIncondicionado>0</DescontoIncondicionado> </Valores> <ItemListaServico>0103</ItemListaServico> <CodigoCnae>6319400</CodigoCnae> <Discriminacao>{[[Descricao=Anúncio na Internet][ItemServico=0103][Quantidade=1][ValorUnitario=16][ValorServico=16][ValorBaseCalculo=16][Aliquota=2][Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0]][[Descricao=Anúncio 2][ItemServico=0103][Quantidade=1][ValorUnitario=8.5][ValorServico=8.5][ValorBaseCalculo=8.5][Aliquota=2][Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0]]}</Discriminacao><CodigoMunicipio>4368501</CodigoMunicipio><TaxaDiversa/></Servico><ValorCredito>2.21</ValorCredito><PrestadorServico><IdentificacaoPrestador><Cnpj>15718145500120</Cnpj><InscricaoMunicipal>8666</InscricaoMunicipal></IdentificacaoPrestador><RazaoSocial>G PU</RazaoSocial><NomeFantasia>VZ</NomeFantasia><Endereco><Endereco>Ambiente de testes não requer endereço</Endereco><CodigoMunicipio>0</CodigoMunicipio><Uf>SC</Uf><Cep>88888888</Cep></Endereco><Contato/></PrestadorServico><TomadorServico><IdentificacaoTomador><CpfCnpj><Cpf>0011405440</Cpf></CpfCnpj></IdentificacaoTomador><RazaoSocial>Gio</RazaoSocial><Endereco><Endereco>Av Pe</Endereco><Numero>1338</Numero><Bairro>São F</Bairro><CodigoMunicipio>4354501</CodigoMunicipio><Uf>RS</Uf><Cep>95560000</Cep></Endereco><Contato><Telefone>51982263344</Telefone><Email>di2ss@yahoo.com.br</Email></Contato></TomadorServico><IntermediarioServico/><OrgaoGerador><CodigoMunicipio>0</CodigoMunicipio><Uf>SC</Uf></OrgaoGerador><ConstrucaoCivil/></InfNfse></Nfse><NfseCancelamento><Confirmacao><Pedido><InfPedidoCancelamento/><ns3:Signature/></Pedido><InfConfirmacaoCancelamento><Sucesso>false</Sucesso></InfConfirmacaoCancelamento></Confirmacao></NfseCancelamento><NfseSubstituicao><SubstituicaoNfse/></NfseSubstituicao></ComplNfse></ListaNfse><ListaMensagemRetorno/></ConsultarLoteRpsResposta></ns2:ConsultarLoteRpsEnvioResponse></env:Body></env:Envelope> Preciso pegar com PHP as informações contidas em:
       
      <InfNfse>
           <Numero>21</Numero>
           <CodigoVerificacao>SCJEYOH4M</CodigoVerificacao>
           <DataEmissao>2018-10-09T11:25:07.810-03:00</DataEmissao>
           <IdentificacaoRps>   
                     <Numero>63</Numero>
         e 
      <OutrasInformacoes>http://e-gov.betha.com.br/e-nota/visualizarnotaeletronica?link=15390
       
      Tentei usando simplexml_load_string, DOMDocument e outras formas sem sucesso.
      Acho que não usei corretamente as funções acima.
       
      Desde já agradeço a ajuda.
       
       
    • Por Gustavo2503
      Como trocar virgula por ponto e ponto por virgula de uma mesma string?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.