string usando strtok [RESOLVIDO]

1. string usando strtok [RESOLVIDO]

Victor Antunes
victor_

(usa Ubuntu)

Enviado em 23/01/2010 - 14:35h

char call[100];
char pathname[100];
char *ptr;

fgets(call, 100, stdin);
if ((ptr = strtok(call, " ")) != NULL) {
if (strcmp(ptr, "ls") == 0) {
if (ptr = strtok(call, "\ 0") != NULL) {
if (strcmp(call, "/") >= 0) {
chdir(ptr);
//puts(getcwd(NULL, 0));
ls();
}
}
}
}

bom, digamos que o comando seja "ls /usr/bin"
pelos meus cálculos, ao reconhecer o "\ 0" (tá com espaço por causa do fórum) no final da string, o valor de ptr deveria ser "/usr/bin", mas obviamente não é isso que tá acontecendo.

qualquer ajuda eu agradeço.


ps: caso alguém ache que o problema seja a função ls(), segue o código (apesar de que eu já fiz vários testes nela, e está funcionando, pois basta um chdir() qualquer antes, e esse ls() funciona pro diretório atual):

void ls() {
DIR *dir;
dir = opendir(getcwd(NULL, 0));
struct dirent *entry = NULL;
while ((entry = readdir(dir)) != NULL) {
if (strncmp(entry->d_name, ".", 1) != 0) {
printf("%s\n", entry->d_name);
}
}
closedir(dir);

}


  


2. MELHOR RESPOSTA

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 24/01/2010 - 11:00h

Fala Victor,

Acho que o problema está na segunda chamada de strtok. Quando você utiliza essa
função mais de uma vez para a mesma string, as chamadas subsequentes devem ter
o primeiro parâmetro como NULL.

if (ptr = strtok(NULL, "\ 0") != NULL) {
/* agora ptr aponta para "/usr/bin" */
...
}

Espero ter ajudado.
t+

3. Re: string usando strtok [RESOLVIDO]

Victor Antunes
victor_

(usa Ubuntu)

Enviado em 24/01/2010 - 11:45h

aê, funcionou.

muito obrigado.
[]'s






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts