Concatenar ruta y variable en C

Este es mi código. Necesito crear 10 archivos con este formato:

0.txt
1.txt
...

Pero no puedo hacerlo, el resultado es diferente. ¿Alguien puede ayudar?

#include <stdlib.h>
#include <string.h>


char* direccion(char *dirD,int number){
    char buffer[100];
    char *n;
    char *q;
    char* formato=".txt";

    sprintf(buffer, "%i", number);
    n= strcat(dirD,buffer);
    q= strcat(n,formato);

    return q;

}
int main(){
    int u;
    int number= 0;
    int t= 0;
    char* q = "e:/c9/";
    for(t=0; t< 10 ; t++){

        char* dir = direccion(q,number);

            if(fopen(dir,"w")){
                fopen(dir,"w");
                u=1;
            }
            else{
                u=0;
                printf("Error\n");
            }
        number++;

    }
    return 0;
}

Gracias !

preguntado el 27 de julio de 12 a las 22:07

¿Es esto bajo Windows en absoluto? -

3 Respuestas

Problema No 1. es:

char *q = "e:/c9/";
for(t = 0; t < 10; t++)
{
    char *dir = direccion(q, number);
}

La variable q es un literal de cadena. Sin embargo, en la función direccion(), lo pasas como primer argumento a strcat(), que intenta modificarlo — BOOM, un error de segmento. Solución:

char buf[1000];
strcpy(buf, "e:/c9/");
char *dir = direccion(buf, number);

El problema n. ° 2 es, como señaló @Charlie Martin, que devuelves un inactivamente cadena local asignada automáticamente, que no es válida después de la direccion() la función devuelve. Quizás

return strdup(buffer);

en este caso; no te olvides de liberarlo después de su uso.

Editar: parece que ni siquiera preguntas sobre esto. Puede crear un archivo usando el open() llamada al sistema (función):

#include <fcntl.h>
#include <stdio.h>

int fd = open("file.txt", O_RDWR | O_CREAT, 0644);
close(fd);

Por supuesto, sustituya el modo de archivo real que desea por 0644 (pero no haga que el archivo sea ejecutable a menos que contenga un programa para ejecutar).

Edición 2: ni siquiera entendí este ... Entonces, en el ciclo for, desea restablecer el nombre de archivo base una y otra vez:

for (yadda yadda)
{
    strcpy(buf, "e:/c9/");
    char *dir = direccion(buf, i);
}

etc.

Respondido 29 Jul 12, 02:07

Bien, pero ahora los archivos creados: 0.txt, 0.txt1.txt, 0.txt1.txt2.txt, etc., ¿cómo puedo resolver esto? - Sark

Está asignando el búfer de forma automática dentro de su función, lo que significa que está asignado en la pila. Cuando regresas, ese recuerdo ya no es válido. Quiere asignar el búfer en el llamador y pasarle un puntero, o asignarlo como estático.

Respondido 27 Jul 12, 22:07

Windows tiene una serie de funciones de manejo de rutas que puede usar para hacer cosas como agregar una extensión a una ruta. Por ejemplo:

PathAddExtension(buffer,".txt");

Para más información, visite http://msdn.microsoft.com/en-us/library/windows/desktop/bb773559(v=vs.85).aspx

Además, es una buena idea trabajar con búferes de tamaño _MAX_PATH cuando se trata de rutas.

Respondido 27 Jul 12, 22:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.