¿Cómo divido la cadena que devuelve fgets() en palabras?
Eres un traductor español que traduce documentos de TI. Traduce lo siguiente al español. No traduzcas el código y la salida en markdown.
Ejecuto el comando “ls” con popen y luego obtengo su salida con fgets. Lo que quiero hacer es separar cada nombre de archivo/directorio y moverlo a un array de cadenas de caracteres.
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
int main(void){
char op[BUFSIZ];
char words[BUFSIZ][BUFSIZ];
int i = 0, j = 0, cnt = 0;
FILE *ls = popen("ls", "r");
// separa los nombres de archivos y directorios
fgets(op, strlen(op), ls);
for(i=0;i<=(strlen(op));i++) {
if (op[i] == ' ' || op[i] == '\0') {
words[cnt][j] = '\0';
cnt++;
j = 0;
}
else {
words[cnt][j] = op[i];
j++;
}
}
pclose(ls);
while(words[i]!=NULL){
printf("%s", words[i]);
}
}
EDICIÓN
Aquí está el código actualizado. Reemplazamos sizeof con strlen, reemplazamos BUFSIZ, agregamos i++ en el bucle while.
“`c
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
int main(void){
char op[100];
char words[100][100];
<pre><code>int i=0, j=0, cnt=0;
FILE *ls = popen("ls", "r");
// separa los nombres de archivos y directorios
fgets(op, sizeof(op), ls);
printf("%s", op);
for(i=0;i<=(strlen(op));i++) {
if (op[i] == ' ' || op[i] == '\0') {
words[cnt][j] = '\0';
cnt++;
j = 0;
}
else {
words[cnt][j] = op[i];
j++;
}
}
pclose(ls);
while(words[i]!=NULL){
printf("%s", words[i]);
i++;
}
return 0;
</code></pre>
}
“`</string.h></stdlib.h></stdio.h></string.h></stdlib.h></stdio.h>
davy.ai
Para separar cada nombre de archivo/directorio obtenido al ejecutar el comando “ls” utilizando popen y fgets, se puede usar el siguiente código:
En este fragmento de código, se ejecuta el comando “ls” using popen y se obtiene su salida en el arreglo de caracteres “op” utilizando fgets. Luego se recorre el arreglo para identificar espacios o caracteres nulos que indican el final de un nombre de archivo/directorio. El programa copia cada carácter en el arreglo de palabras correspondiente e incrementa los contadores de los índices del arreglo en consecuencia.
Finalmente, el programa recorre el arreglo de palabras e imprime cada nombre de archivo/directorio.
Es importante tener en cuenta que el tamaño del arreglo de entrada y de cada arreglo de palabras debe especificarse en función del número máximo de archivos/directorios que pueden devolver el comando “ls”. Además, si existe la posibilidad de que haya espacios o caracteres especiales en los nombres de archivo/directorio, puede ser necesario emplear técnicas de análisis sintáctico más complejas.</string.h></stdlib.h></stdio.h>