Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Функция fopen


Автор: 123 15.9.2006, 09:32
Мой c++ builder 6 ругается на этот код:

#include <stdio.h>
FILE* file=fopen("filename.txt", "w+");
fprintf(file,"%S", "Это строка будет в файле");
fclose(file);

Выдает ошибку:

  [C++ Error] Unit5.cpp(3): E2303 Type name expected
  [C++ Error] Unit5.cpp(3): E2356 Type mismatch in redeclaration of 'fprintf(FILE *,const char *,...)'
  [C++ Error] Unit5.cpp(3): E2063 Illegal initialization
  [C++ Error] Unit5.cpp(3): E2293 ) expected
  [C++ Error] Unit5.cpp(4): E2303 Type name expected
  [C++ Error] Unit5.cpp(4): E2356 Type mismatch in redeclaration of 'fclose(FILE *)'
  [C++ Error] Unit5.cpp(4): E2063 Illegal initialization
  [C++ Error] Unit5.cpp(4): E2293 ) expected

Автор: 586 15.9.2006, 09:43
Цитата(123 @  15.9.2006,  10:32 Найти цитируемый пост)
FILE* file=fopen("filename.txt", "w+");
fprintf(file,"%S", "Это строка будет в файле");
fclose(file);

Должно быть "%s". Большая S означает, что строка UNICODE.
Цитата(123 @  15.9.2006,  10:32 Найти цитируемый пост)
  [C++ Error] Unit5.cpp(3): E2303 Type name expected
  [C++ Error] Unit5.cpp(3): E2356 Type mismatch in redeclaration of 'fprintf(FILE *,const char *,...)'
  [C++ Error] Unit5.cpp(3): E2063 Illegal initialization
  [C++ Error] Unit5.cpp(3): E2293 ) expected
  [C++ Error] Unit5.cpp(4): E2303 Type name expected
  [C++ Error] Unit5.cpp(4): E2356 Type mismatch in redeclaration of 'fclose(FILE *)'
  [C++ Error] Unit5.cpp(4): E2063 Illegal initialization
  [C++ Error] Unit5.cpp(4): E2293 ) expected 

Данный код тут не причем. Вероятно, где-то неправильно объявлена функция || класс || структура. Причем эта ошибка может быть в .H-файле. У меня что-то подобное было. Покахи исходник - скажу точно.

Автор: 123 15.9.2006, 09:47
#include <stdio.h>
FILE* file=fopen("filename.txt", "w+");
fprintf(file,"%S", "Это строка будет в файле");
fclose(file);

это весь код, просто оторвал от основной программы, чтобы протестировать.
может stdio.h выложить?

Автор: kirjanov 15.9.2006, 09:54
123,
лучше весь код программы покажи

Автор: 586 15.9.2006, 09:54
Код
#include <windows.h>
#include <stdio.h>
#pragma hdrstop
#pragma argsused
int main(int argc, char* argv[])
{
 FILE* file=fopen("C:\\filename.txt", "w+");
 fprintf(file,"%s", "Ýòî ñòðîêà áóäåò â ôàéëå");
 fclose(file);
 return 0;
}

Автор: Romikgy 15.9.2006, 09:54
123, имхо вполне четко сказали
Цитата(586 @  15.9.2006,  08:43 Найти цитируемый пост)
Должно быть "%s". Большая S означает, что строка UNICODE.


Автор: 123 15.9.2006, 09:55
Цитата

лучше весь код программы покажи


Вот это все:

Цитата

#include <stdio.h>
FILE* file=fopen("filename.txt", "w+");
fprintf(file,"%S", "Это строка будет в файле");
fclose(file);


Я так думаю ошибка в библиотеке.

Автор: 586 15.9.2006, 09:57
Цитата(123 @  15.9.2006,  10:55 Найти цитируемый пост)
FILE* file=fopen("filename.txt", "w+");
fprintf(file,"%S", "Это строка будет в файле");
fclose(file);

Нельзя это писать вне функции!!!

Автор: Romikgy 15.9.2006, 09:59
Код

Format specifier    printf function    Unicode function
    %c                       narrow        wide
    %C              wide        narrow 
    %hc              narrow           narrow
    %hC               narrow         narrow
    %lc                 wide        wide
    %lC                wide        wide
    %s               narrow           wide
    %S               wide        narrow
    %hs            narrow        narrow
    %hS            narrow        narrow
    %ls               wide         wide
    %lS              wide        wide

Автор: 123 15.9.2006, 10:01
Спасибо все понятно!

Автор: dumb 15.9.2006, 10:09
Код

#include <stdio.h>

эту строчку в начало файла. такие строки не должны быть внутри функций или каких-либо объявлений.

edit: хех. похоже, оказалось наоборот - функции никакой нет...  smile
ps. и опять я забыл "обновить" перед постом...

Автор: 123 15.9.2006, 12:21
C++ выдает ошибку [Linker Error] Unresolved external '__fastcall TForm1::Label1Click(System::TObject *)' referenced from E:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\UNIT5.OBJ

При таком коде:

Код

#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include "fdgfdgf.h"
#define NAME "C:\filename11.txt"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Click(TObject *Sender)
{
FILE* file=fopen("NAME", "w+");
fprintf(file,"fhgfhgfh");
fclose(file);
}
//---------------------------------------------------------------------------




Автор: Romikgy 15.9.2006, 12:28
Код

FILE* file=fopen(NAME, "w+");


Автор: 123 15.9.2006, 12:34
Цитата

FILE* file=fopen(NAME, "w+");


Все равно ошибка.

Автор: dumb 15.9.2006, 12:34
Код

#include "fdgfdgf.h" // хм...
#define NAME "C:\filename11.txt"
...
//---------------------------------------------------------------------------
void __fastcall TForm1::Click(TObject *Sender) // не пытайся исправлять имена функций(пока не поймешь, что где и как)
// если это обработчик клика на Label, то он и должен называться Label1Click
{
FILE* file=fopen("NAME", "w+"); // NAME у тебя определен как строка с кавычками. вторые не нужны.
// проверять надо, открылся ли файл... if (file) {...}
fprintf(file,"fhgfhgfh");
fclose(file);
}
//---------------------------------------------------------------------------

Автор: 123 15.9.2006, 12:39
Скопировал твой код, все равно ошибка вылезла.

Автор: 123 15.9.2006, 13:08
при таком коде все работает:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#define NAME "C:\\filename11.txt"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Click(TObject *Sender)
{
FILE* file=fopen(NAME, "w+");
fprintf(file,"%s","fhgfhgfh");
fclose(file);
}
//---------------------------------------------------------------------------


Автор: Romikgy 15.9.2006, 13:12
ну дык кто его знает что у тебя в 
Цитата(123 @  15.9.2006,  11:21 Найти цитируемый пост)
#include "fdgfdgf.h"


Автор: 586 15.9.2006, 17:01
Цитата(123 @  15.9.2006,  13:21 Найти цитируемый пост)
C++ выдает ошибку [Linker Error] Unresolved external '__fastcall TForm1::Label1Click(System::TObject *)' referenced from E:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\UNIT5.OBJ

в unit5.h или unit5.cpp напиши:
Код
#include "unit1.h"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)