Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

158
Views
Cómo hacer una nueva línea al usar echo para escribir un archivo en C

hola, estoy tratando de tomar los datos de los archivos en una carpeta con la función del sistema, este es el código

 char path[100],command[120]; scanf("%s",&path); sprintf(command,"echo $(ls %s) > something.txt",path); system(command);

pero cuando miro algo.txt no hay una nueva línea. Esta es la salida, todo en una línea con muchos nombres de archivos omitidos:

 acpi adjtime adobe apparmor.d arch-release asound.conf ati at-spi2 avahi bash.bash_logout ... wpa_supplicant X11 xdg xinetd.d xml yaourtrc

Probé -e -E -n opciones de eco pero no funcionó. ¿Cómo hacer una nueva línea después de cada uno de estos archivos?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

No deberías usar echo . haz solo

 sprintf(command,"ls %s > something.txt",path); system(command);

Cuando usa echo , envía todos los argumentos de la línea de comando a la salida estándar, uno por uno, separados por el carácter de espacio. El carácter de nueva línea (que es la salida del comando ls ) funciona como un separador de argumentos, al igual que el espacio.

over 4 years ago · Santiago Trujillo Report

0

Hay una nueva línea, que es de esperar. El comando echo imprime todos sus argumentos en una sola línea separados por espacios, que es el resultado que ve.

Necesitas ejecutar el resultado de:

 echo "$(ls %s)"

para conservar las nuevas líneas en la salida de ls . Consulte Captura de salida de varias líneas en una variable de Bash .

Usar:

 snprintf(command, sizeof(command), "echo \"$(ls %s)\" > something.txt", path);`

Por supuesto, el echo es redundante; sería mejor simplemente ejecutar:

 ls %s

y por lo tanto:

 snprintf(command, sizeof(command), "ls %s > something.txt", path);

Si mantiene el eco, debe preocuparse por el hecho de que tiene más de 20 caracteres adicionales en la cadena de formato, por lo que 120 debería ser más como 130 si no 140.

También debe usar scanf("%99s", path) (sin ampersand; agregar límite de longitud) e idealmente verificar que funcionó ( if (scanf(...) == 1) { ... OK ... } ).

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!