String handling

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:
Um metodo pouco ortodoxo é um "for" que copie caracter a caracter ... ai tens a certeza do que tás a fazer.
 
Problem solved.
Mt mais simples do que estava à espera.

Código:
snprintf (new_channel, 13, "%s", dump);

E os meus problemas ficaram resolvidos. :)
 
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.
 
Back
Topo