1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

String handling

Discussão em 'Programação' iniciada por COLD_WAR, 3 de Abril de 2006. (Respostas: 5; Visualizações: 638)

  1. COLD_WAR

    COLD_WAR Power Member

    Boas, estou aqui com um problema neste segmento de código, a questão é que eu preciso apenas os 12 primeiros caracteres de uma string interna do sistema:

    String original: SIP/12345678-865f
    String que pretendo: SIP/12345678

    O problema é que nem sempre funciona e põe-me caracteres extra na string que nem sequer pertencem à string original, parece ser lixo que ele tem em memória:

    String que me devolve: SIP/12345678! ou SIP/12345678$ , etc..

    O que poderá estar aqui mal?

    Código:
                    char *new_channel=malloc(sizeof(new_channel));
                    char *buffer=malloc(sizeof(buffer));
                    char *dump=malloc(sizeof(c->name));
                    int tam;
    
                    dump = c->name;
                    strncpy(new_channel, dump, 12);
                    tam=strlen(new_channel);
                    printf ("****************************************************************\n");
                    printf ("%s %i\n", dump, tam);
                    printf ("****************************************************************\n");
                    ast_copy_string(workspace, new_channel, workspacelen);
                    *ret = workspace;
    
     
    Última edição: 3 de Abril de 2006
  2. Madril

    Madril 1st Folding then Sex

    Um metodo pouco ortodoxo é um "for" que copie caracter a caracter ... ai tens a certeza do que tás a fazer.
     
  3. COLD_WAR

    COLD_WAR Power Member

    Já me tinha lembrado dessa solução quick & dirty. Se calhar é mesmo o melhor a fazer.
    Obg pela sugestão.
     
  4. COLD_WAR

    COLD_WAR Power Member

    Problem solved.
    Mt mais simples do que estava à espera.

    Código:
    snprintf (new_channel, 13, "%s", dump);
    E os meus problemas ficaram resolvidos. :)
     
  5. Madril

    Madril 1st Folding then Sex

    Não conhecia essa função ... quando me lembrar vou ver ao Man :P
     
  6. badsatan

    badsatan Power Member

    O strncpy tb dá, mas tens que pôr o \0 "à mão".

    strncpy(dest, src, 12);
    dest[12] = '\0';
    mas antes disto, dest tem que ser alocado com *13* posições
    char *dest = malloc(sizeof(*dest)*13);

    isto leva-me ao ponto em que todos os teus mallocs estão mal e alguns nem sequer são precisos.
     

Partilhar esta Página