Проблема с fopen () - PullRequest
       3

Проблема с fopen ()

0 голосов
/ 26 мая 2011

Поэтому я пишу небольшую утилиту для форматирования моего файла инвентаризации таким образом, что я могу импортировать его в существующую базу данных. У меня большая проблема, пытаясь просто сделать fscanf. Я прочитал тонны файла в c в прошлом. Что я тут не так делаю.

Редактировать, основываясь на предложении Кристофера, все еще получающем NULL.

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

int main ()
{

FILE* stream;
FILE* output;
char sellercode[200];
char asin[15];
string sku[15];
string fnsku[15];
int quality;

stream = fopen("c:\out\dataextract.txt", "r");
output = fopen("c:\out\output.txt", "w");

if (stream == NULL)
{
    return 0;
}

for(;;)
{
    //if (EOF) break;
    fscanf(stream, "%s", sku);
    fprintf(output, "%s %s  %s  %s  %i\n", sku, fnsku, asin, quality);
}
 return 0;
 }

Ответы [ 3 ]

4 голосов
/ 26 мая 2011
if (stream = NULL)
{
    return 0;
}

должно быть

if (stream == NULL)
{
    return 0;
}
2 голосов
/ 27 мая 2011

Здесь на самом деле много проблем. Кристофер и Мах (в комментарии) упоминают некоторые из них. Но большая проблема в том, что вы не выделяете места для чтения (и записи) ваших данных.

Имея string sellercode = ""; (пс, do not определяет тип "string", вы только наносите себе вред), вы указываете на массив только для чтения голец. Вам действительно нужно оставить здесь немного памяти для чтения ваших данных, иначе вы рискуете испортить вашу память.

Эти переменные должны быть объявлены:

char sellercode[SOME_REASONABLE_SIZE];
char asin[SOME_REASONABLE_SIZE];
char sku[SOME_REASONABLE_SIZE];
char fnsku[SOME_REASONABLE_SIZE];

с некоторым значением SOME_REASONABLE_SIZE.


Вы также должны всегда явно закрывать файлы. Никогда не оставляйте их открытыми.


Последнее, что я заметил сейчас, когда вы упоминаете, что вы используете обратную косую черту в своих путях, но они не экранированы. Вам придется сбежать от них.
stream = fopen("c:\\out\\dataextract.txt", "r");
output = fopen("c:\\out\\output.txt", "w");
0 голосов
/ 27 мая 2011

Обратная косая черта является escape-символом внутри строк.Используйте косую черту в ваших путевых именах."C: /foo/bar.txt"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...