El programa siempre termina de salir. Me parece que se esté ejecutando en este problema con frecuencia y creo que de alguna manera previamente fijado, pero no estoy seguro de cómo. ¿Por qué no crear un archivo?

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

int main (void){
    FILE *fp;
    int c;

    char file_w[100];
    char string[100];
    printf("Enter filename\n");
    fgets(file_w, 100, stdin);
    fp = fopen(file_w, "w");
    if (fp == NULL){
        printf("Can't open file\n");
        exit(0);
    }   
    printf("Enter a string");
    fgets(string, 100, stdin);
    for(c = 0; c <= sizeof(string); c++)
    {
        fprintf(fp, "%s\n", string);
    }

    printf("file written");
    fclose(fp);
    return 0;
}
  • Por favor, actualice su post o añadir una respuesta si usted encontró cuál era el problema. Por CIERTO: ¿cómo te fue el examen? 🙂
InformationsquelleAutor the5thace | 2012-12-21

3 Comentarios

  1. 2

    Intente imprimir el nombre del archivo que ha introducido:

    printf("%s\n", file_w);

    justo después de la línea de obtener file_w, sólo para estar seguro de que escriba lo que usted quiere. Yo mismo los casos, el terminal podría ser mal configurado.

    Intentar entrar en una absoluta ruta de acceso del nombre, si su equipo es un Linux o Unix:

    /tmp/newfile.txt

    Si su ordenador es Windows… Bueno probar a ver si C:\temp\ existir (o crear) y, a continuación, escriba:

    C:\temp\newfile.txt

    En cualquier caso, recuerde que usted puede especificar una ruta de acceso absoluta, y no sólo el nombre de archivo. Así que revise si tiene los derechos (es decir, los permisos) permisos de escritura en el directorio donde el archivo debe ser por escrito.

    En caso de que desee comprobar el error y tener una mejor descripción del problema, pruebe a utilizar el siguiente líneas en lugar de su código, justo debajo de la fopen

      if( fp == NULL ) {
            //Error, as expected.
            perror( "Error opening file" );
            printf( "Error code opening file: %d\n", errno );
            printf( "Error opening file: %s\n", strerror( errno ) );
            exit(-1);
      }

    strerror es una maravillosa función sólo porque devolver una descripción del problema en lugar de un código de error.

    • Estoy recibiendo un error al abrir el archivo: argumento no Válido! Necesidad de llegar al fondo de esto lo antes posible. Examen en una hora! printf confirma que el nombre está bien.
    • Tengo que ir en la oficina, dentro de los 20′. A continuación, intente imprimir el nombre del archivo en primer lugar. Asegúrese de introducir sólo texto sin formato, sin caracteres extraños como ?*+
    • Sí, no hay caracteres extraños en el nombre está bien!
    • Sólo para estar seguro… ¿has probado a añadir la función strerror me sugiere usted?
    • Hice strreror devuelto : argumento no válido
    • Ha añadido #include <errno.h> #include <cadena.h> En la parte superior de su código fuente? Puede ser el error está relacionado con el valor que no está correctamente definido, ya que falta incluir
    • Sí…mismo resultado
    • Lo siento me tengo que ir. La buena suerte.

  2. 1

    Creo que el problema es «invisible personaje después de que el nombre real de fgets()». Voy a dejar de averiguar exactamente lo que el personaje es, de dónde viene y cómo solucionarlo, como «luchando para resolver un problema» es parte del proceso de aprendizaje cuando se trata de la programación. Si fuera fácil, todo el mundo podría hacerlo.

    • Tenemos 20 minutos hasta que un examen de si se podían imaginar lo que yo sería en el departamento 😛
    • No te preocupes, lo tendrás. Intente imprimir (con %d) cada carácter en la cadena que es el nombre del archivo… (tratar con un nombre corto!)
    • Hmm, puedo crear archivos cuyos nombres terminan con un retorno muy bien. Está prohibido que en Windows, o lo que podría ser el problema?
    • Sí, windows no le gusta ningún espacio en blanco otros de 0x20 (posiblemente nbsp, 0xA0 así, nunca lo he probado, y estoy en una máquina Linux. He visto esto antes.
  3. 0

    Si el valor de retorno de fopen es NULO significa que algún error se ha producido. Yo sugiero que busque en la errno global para ver qué error se ha producido para ayudar a depurar ¿por qué no abrir el archivo.

    La w bandera hace lo siguiente:

    escribir: Crear un archivo vacío para operaciones de salida. Si un archivo con el mismo nombre ya existe, su contenido se descarta y el archivo se trata como un nuevo archivo vacío.

    Por lo que se debe crear un archivo cuando no existe ninguno, o cuando existe, sobreescribir su contenido.

    Si no lo hace, usted tiene otro problema, pero a partir de la poca información que he dado, es difícil decir lo que es.

    • ¿Qué otra información que podría dar?
    • Tienes la correcta permisos de lectura/escritura?
    • Debe. Cuenta de administrador. Había un programa similar de trabajo antes de la mano!
    • Así ha pasado a través de ella con un depurador, y miró lo que sucede? También compruebe el contenido de errno como ya he sugerido.

Dejar respuesta

Please enter your comment!
Please enter your name here