Ir para conteúdo
Fórum Script Brasil

Marcia Rosa

Membros
  • Total de itens

    18
  • Registro em

  • Última visita

Posts postados por Marcia Rosa

  1. Então Beraldo, os códigos que tentei, sem sucesso em ambos, foram esses:

    void ParametrosRetorno(char *parametros, char *loja_cnpj, char *loja_nome, char *loja_endereco, char *saldo_valor, char *data, int tam) {
        int i;
    
        //setar o cnpj da loja
        parametros++;
        for (i = 0; i < tam; i++) {
            if (*parametros == '|')
                break;
            else {
                *loja_cnpj = *parametros;
                parametros++;
                loja_cnpj++;
            }
        }
    
        //setar o nome da loja
        parametros++;
        for (i = i; i < tam; i++) {
            if (*parametros == '|')
                break;
            else {
                *loja_nome = *parametros;
                parametros++;
                loja_nome++;
            }
        }
    
        //setar o endere�o da loja
        parametros++;
        for (i = i; i < tam; i++) {
            if (*parametros == '|')
                break;
            else {
                *loja_endereco = *parametros;
                parametros++;
                loja_endereco++;
            }
        }
    
        //setar o valor/saldo retornado
        parametros++;
        for (i = i; i < tam; i++) {
            if (*parametros == '|')
                break;
            else {
                *saldo_valor = *parametros;
                parametros++;
                saldo_valor++;
            }
        }
        //setar a data
        parametros++;
        for (i = i; i < tam; i++) {
            if (*parametros == 'F')
                break;
            else {
                *data = *parametros;
                parametros++;
                data++;
            }
        }
    }
    void ParametrosRetorno2(char *parametros, char *loja_cnpj, char *loja_nome, char *loja_endereco, char *saldo_valor, char *data) {
        int i = 0;
        int flag = 0;
        int pos = 0;
        while (parametros[i] != '') {
            if (flag == 0) {
                if (parametros[i] == '|') {
                    flag++;
                    pos = 0;
                } else {
                    loja_cnpj[pos] = parametros[i];
                    pos++;
                }
    
            }
            if (flag == 1) {
                if (parametros[i] == '|') {
                    flag++;
                    pos = 0;
                } else {
                    loja_nome[pos] = parametros[i];
                    pos++;
                }
    
            }
            if (flag == 2) {
                if (parametros[i] == '|') {
                    flag++;
                    pos = 0;
                } else {
                    loja_endereco[pos] = parametros[i];
                    pos++;
                }
    
            }
            if (flag == 3) {
                if (parametros[i] == '|') {
                    flag++;
                    pos = 0;
                } else {
                    saldo_valor[pos] = parametros[i];
                    pos++;
                }
    
            }
            if (flag == 4) {
                if (parametros[i] == '|') {
                    flag++;
                    pos = 0;
                } else {
                    data[pos] = parametros[i];
                    pos++;
                }
    
            }
            i++;
        }
    }

  2. OBS: não posso usar strtok porque meu compilador não aceita.

    o que quer dizer com isso?

    dá erro? se sim, poste a mensagem

    e que compilador é?

    Beraldo,

    É um compilador para aplicação embarcada. Tem várias funções que não podem ser usadas em o strtok é uma delas.

  3. Pessoal, alguém teria uma função que faça um split numa string? Já tentei de tudo e não consigo e os exemplos que achei na internet não funcionaram aqui.

    Tenho uma variável:

    "Marcia|Silva|Rosa"

    Preciso de:

    "Marcia"

    "Silva"

    "Rosa"

    OBS: não posso usar strtok porque meu compilador não aceita.

    Obrigada,

  4. alguns compiladores não suportam usar uma referencia para ponteiro diretamente (no caso o &*).

    Se você não sabe o que é passar um ponteiro por referencia leia o artigo a seguir: (EM INGLES)

    http://www.codeguru.com/cpp/cpp/cpp_mfc/po...ticle.php/c4089

    fiz uma pequena modificação na função para funcionar com o seu compilador.

    void PadLeft(char charPrencher, char **charDestino, const char *charOrigem, int total)
    {
     int strSize=strlen(charOrigem)+total+1;
     *charDestino=(char*)malloc(strSize);
     char *tmp=*charDestino;
     memset(*charDestino, 0, strSize);
     int i;
     for(i=0; i<total; i++){
        tmp[i]=charPrencher;
     }
     strcat(tmp, charOrigem);
     *charDestino=tmp;
    }
    agora a referencia para o ponteiro deverá ser passada ao chamar a função. (o segundo parametro deverá ser precedido de '&' "). exemplo:
    char *dest;
    const char *origem="Test";
    PadLeft('0', &dest, origem, 5); //Repare que "dest" é passado por referencia
    MessageBox(0, dest, 0, 0);
    free(dest); //Não se esqueça de desalocar a memoria

    *Se não funcionar agora sugiro trocar de compilador ¬¬

    ;)

    David,

    Agora sim funcionou. Aos poucos estou me acostumando com o C. Achava que seria fácil pra mim que mexia com C# mas estou vendo que muita coisa é BEM diferente.

    Muito obrigada pela ajuda.

    Marcia.

  5. qual erro deu?

    que compilador você esta usando?

    eu dei uma testada rapida aqui no visual studio e funcionou...

    você deve ter errado ao chamar a função....

    tenta compilar o código abaixo:

    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    #include <conio.h>
    
    void PadLeft(char charPrencher, char *&charDestino, const char *charOrigem, int total)
    {
     int strSize=strlen(charOrigem)+total+1;
     charDestino=(char*)malloc(strSize);
     memset(charDestino, 0, strSize);
     int i;
     for(i=0; i<total; i++){
     charDestino[i]=charPrencher;
     }
     strcat(charDestino, charOrigem);
    }
    
    int main()
    {
        char *destino;
        PadLeft('0', destino, "test", 10);
        printf("%s", destino);
        free(destino);
        
        getch();
    }

    Olá David,

    Aqui eu já havia testado da vez passada e gera o seguinte erro: "Src\Funcoes.c:92: error: parse error before '&' token". Se tiro o & do parametro charDestino, compila. Só que daí não faz nada.

    Eu uso compilador de um sistema embarcado (não posso informar qual). Tenho que ficar limitada ao que esse compilador interpreta, que no caso não é tudo que normalmente se pode usar no C.

    De qualquer forma valeu pela força e vou continuar tentando.

    Abç.

    Marcia

  6. Senhores,

    Venho recorrer a ajuda de vocês novamente pois estou a dois dias quebrando a cabeça e ainda não consegui resolver meu problema.

    No C# quando eu preciso alocar valores a esquerda eu uso PadLeft. Exemplo:


    string var1 = "55";
    var1 = var1.PadLeft(5, '0');
    //valor de var1 será "00055"
    [/codebox]

    Alguém sabe me dizer se o C possui algo assim? Ou já viu algo que dê pra fazer isso?

    Meu código que estou tetando fazer:

    [codebox]
    void PadLeft(char *charPrencher, char *charDestino, char *charOrigem, int total)
    {
    int i;
    int j;
    //preencher antes do valor enviado
    for(i=0;i < (total - (int)strlen(charOrigem)); i++)
    {
    *charDestino = charPrencher;
    charDestino++;
    }

    //depois juntar com os dados enviados
    for(j=0; j < strlen(charOrigem); j++)
    {
    charDestino++;
    *charDestino = *charOrigem;
    charOrigem++;

    }
    }
    //onde:
    //charPrencher = char que será acrescido antes (zero no exemplo)
    //charDestino = o novo valor 00055 depois de processado
    //charOrigem = 55
    //total = tamanho total de caracteres que irá ter para montar a quantidade de caracteres a esquerda (no exemplo 5)

    Qualquer dica é bem vinda.

    Obrigada.

  7. Talvez o 512+1 seja para armazenar 512 caracteres na string (512 + 1 do null), e o autor quis deixar explícito essa informação.

    "uint8" deve significar "unsigned char", não é a mesma coisa que char.

    O problema no código não está no strcpy, está na declaração da string.

    static    uint8    var1[512+1];
    char str_tmp = "123456";  /* não funciona, pois um char somente guarda um byte, e você está querendo armazenar 7 (6 + 1 do null, o terminador da string) */
    strcpy(var1, str_tmp);
    Você deve fazer assim:
    static    uint8    var1[512+1];
    char str_tmp[] = "123456";  /* funciona, pois o compilador está alocando 7 bytes para a variável str_tmp */
    strcpy(var1, str_tmp);

    É isso que você quer?

    Abraços!

    Durub,

    Primeiro peço desculpas pela demora em responder mas estava em viagem. E obrigada pela explicação. Testei aqui e já me ajudou. ao menos posso correr atrás do resto agora.

    Obrigada pela peciência de explicar, pois como disse estou começando no C e tenho vícios de outras linguagens, e alguns colegas de fórum acham que estamos pedindo para resolver o problema mas na verdade uma simples explicação já ajudaria para esse e vários outros problemas que possamos vir a encontrar.

    Abç

    Marcia.

  8. Já tentou botar char no lugar de uint8? E também não compreendi o seu erro.

    Tem uns códigos que você postou que não deve dar certo mesmo. Esse trecho mesmo não rola:

    char str_tmp = "123456";
    Tenta assim pra ver:
    uint8 var1[512+1]; // Porque não 513 ?
    strcpy(var1, "123456");

    Abraço.

    Ronaldo,

    Não posso mudar o uint8 pois faz parte do sistema já em uso onde existem outras bibliotecas usando esse modelo.

    O 512+1 também não entendi porque foi feito assim. Como estava assim, não mexi.

    Quanto a sua dica de usar o strcpy para a variável var1, como eu disse assim sempre funcionou! Só que os valores devem ser dinâmicos e não estáticos como está ali.

    Mesmo assim, agradeço.

    Marcia.

  9. Se for erro de compilação, posta a saida do compilador.

    Abraço.

    Ronaldo, está compilando perfeitamente. Só que não tenho debugar porque testo num terminal com características específicas que não tenho como simular no meu PC. Daí ao rodar lá, ou não pega o valor ou dá erro e a app reinicia sem exibir a mensagem de erro.

    Obrigada.

  10. Olá,

    Novamente recorro a ajuda de vocês porque tem coisas que ainda estou aprendendo e descobrindo os segredos.

    Baixei um código da internet onde tem a seguinte variável:


    static uint8 var1[512+1];
    strcpy(var1, "123456");
    [/CODEBOX]

    Nesse caso acima está estático. E preciso do valor dinâmico.

    Daí tentei assim (e não funcionou):

    [CODEBOX]
    static uint8 var1[512+1];
    char str_tmp = "123456";
    strcpy(var1, str_tmp);

    Tentei assim (e não funcionou):


    static uint8 var1[512+1];
    char *str_tmp = "123456";
    strcpy(var1, str_tmp);
    [/CODEBOX]

    Tentei assim (e não funcionou):

    [CODEBOX]
    static uint8 var1[512+1];
    char str_tmp = "123456";
    strcpy(var1, (char)str_tmp);

    Tentei assim (e não funcionou):


    static uint8 var1[512+1];
    char str_tmp = "123456";
    int i = 0;
    for(i = 0; i <= strlen(str_tmp) - 1; i++){
    //tentei...
    var1[i] = (byte)str_tmp[i];
    //tentei
    var1[i] = (int)str_tmp[i];
    }
    [/CODEBOX]

    Qualquer dica que pode me ajudar a achar um caminho, serve.

    Obrigada.

  11. Nos exemplos que passei são int, com char você não pode simplesmente passar o ponteiro, basta criar ele antes e passar, olha só:

    Arquivo1
    main()
    {
       char variavel[16];
       char *pont = variavel; // Cria ponteiro para variável 
       
       Metodo2( &variavel );
       printf("X = %s", variavel  );
    }
    
    Arquivo2
    
    
    void Metodo2( char **variavel  ) //Aqui você recebe um ponteiro de um ponteiro lol
    {
       strcpy( *variavel, "return ok");
    }

    Agora vai dar certo.

    Perfeito. Funcionou exatamente como precisava. Só confirmar se o que alterei está certo....

    Em "Metodo2( &variavel );" no arquivo1 eu mudei para "Metodo2( &pont );". Assim funcionou. Tá certo?

    Aproveitar e perguntar mais uma coisa....sempre que passar char no parâmetro deve ser com dois asteríscos "void Metodo2( char **variavel )"?

    Muito obrigada. Você não sabe o quanto me ajudou pois em nenhuma apostila e material que encontrei na internet há referências de fazer algo desse modo que você me ensinou.

    Márcia.

  12. Márcia,

    Acho que sua dificuldade está em diferenciar como passar valor de variável e passar variável por referência.

    Arquivo1
    main()
    {
       int x =0;
       
       Metodo1( x ); // Aqui você está passando o valor de X, que é 0. Qualquer operação neste método não altera x do arquivo1.
       printf("X = %d", x ); // Aqui vai printar 'X = 0'
    
       Metodo2( &x ); // Aqui você está passando uma referencia ao endereço de memória da variável X. Operação no método altera x aqui.
       printf("X = %d", x ); // Aqui vai printar 'X = 12'
    }
    
    Arquivo2
    
    Metodo1( int x )
    {
       x = 12; // x no caso é simplesmente uma variável local
    }
    
    Metodo2( int *x )
    {
       *x = 12; // aqui altera o valor da variável local x do Arquivo1
    }
    Espero ter ajudado, WebPantoja
    webpantoja, Acho que funcionou. Não pude ter certeza porque eu tenho que retornar um char de 16. Poderia me dizer como ficaria usando char? Fiz aqui e não deu certo:
    Arquivo1
    main()
    {
       char variavel[16];
       
       Metodo2( &variavel );
       printf("X = %s", variavel  );
    }
    
    Arquivo2
    
    
    Metodo2( char *variavel  )
    {
       *variavel  = "return ok";
    }

  13. Márcia,

    Acho que sua dificuldade está em diferenciar como passar valor de variável e passar variável por referência.

    Arquivo1
    main()
    {
       int x =0;
       
       Metodo1( x ); // Aqui você está passando o valor de X, que é 0. Qualquer operação neste método não altera x do arquivo1.
       printf("X = %d", x ); // Aqui vai printar 'X = 0'
    
       Metodo2( &x ); // Aqui você está passando uma referencia ao endereço de memória da variável X. Operação no método altera x aqui.
       printf("X = %d", x ); // Aqui vai printar 'X = 12'
    }
    
    Arquivo2
    
    Metodo1( int x )
    {
       x = 12; // x no caso é simplesmente uma variável local
    }
    
    Metodo2( int *x )
    {
       *x = 12; // aqui altera o valor da variável local x do Arquivo1
    }

    Espero ter ajudado,

    WebPantoja

    webpantoja,

    Com certeza melhorou meu entendimento desse tal de *ponteiro. Vou testar essa sua dica e ver se vai dar certo. Pela lógica, creio que dará certo.

    Antes preciso ver o por quê e fazer o meu compilador voltar a funcionar. Estava tudo bem até ontem a tarde. Assim que o refizer voltar a ativa, dou resposta no tópico.

    Muito obrigada.

    Márcia.

  14. void teste(int *x) {

    *x = 12;

    }

    // ...

    int x = 0; // x é igual a 0

    teste( &x ); // agora x é igual a 12

    Mnemonic,

    Até tentei fazer isso só que dá erro que a variável x não foi declarada.

    Declarei ela no arq2.c; fiz include do arq2.c no arq1.c e após invocar o método que preenche o valor de X no arq2.c dei um print para exibir o valor de X.

    Continuo na mesma.

    Obrigada pela tentativa.

  15. Olá,

    Estou iniciando no desenvolvimento C. Estou com o seguinte problema:

    -Tenho dois arquivos: arq1.c e arq2.c.

    -Fiz um include do arq2.c dentro do arq1.c onde chamo uma função do arq2.c.

    -Dentro do arq2.c tenho uma variável char nome que recebe um valor tratada dentro da função invocada.

    -Como faço para receber essa variável dentro do arq1.c que chamou a função?

    Obrigada.

    Márcia.

×
×
  • Criar Novo...