Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с fopen :-)

8.3K
31 августа 2007 года
Delphi-cs
45 / / 26.07.2005
Вчера написал маленькую програмку конвертер шрифтов для своего будущего движка. Писал в MSVC 8. Как обычно получил кучу варнингов.
Программа работала. Перенес ее в Pelles С к своему двигу поближе так сказать :-) НО получил 2 ошибки такого содержания:
error #2140: Type error in argument 1 to 'fopen'; found 'char * *' expected 'const char *'.
Ругается на строчку: if (!(file = fopen(&filename, "rb")))
Файлнейм обьявлена так: char *filename;
Кто не прав? Я? Студия? или Pelles C?
12K
31 августа 2007 года
__AleXX__
133 / / 02.04.2007
а зачем ты пишешь: &filename ?
8.3K
31 августа 2007 года
Delphi-cs
45 / / 26.07.2005
А как надо?
Если написать просто filename программа вылетает с ошибочкой :-(
12K
31 августа 2007 года
__AleXX__
133 / / 02.04.2007
Так приведи, блин, код. Я не тедепат что ты там наваял и почему вылетает.
Мысли, конечно есть. Но хоть бы ошибочку кинул ? а?
(ну и код, конечно, не помешает :)) )
8.3K
31 августа 2007 года
Delphi-cs
45 / / 26.07.2005
Код:
/********************************************************************************************/
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
/********************************************************************************************/
struct Image
{
    unsigned char *Data;
    int width;
    int height;
    int color;
};
struct CImage
{
    int width;
    int height;
    unsigned char *Data;
};
/********************************************************************************************/
struct Image TGA;
struct CImage BEF;
char *filename;
unsigned char header[6];
unsigned char bpp;
int size;
int n = 0;
/********************************************************************************************/
void ReadTGA(void);
void Convert(void);
void WriteBEF(void);
void Error(char *);
/********************************************************************************************/
int main()
{
    printf("***************************6y6yka Engine Converter ver. 0.1*********************\n");
    printf("Enter input file name please...\n");
    scanf("%s",&filename);
    printf("Reading start...\n");
    ReadTGA();
    printf("Reading end!!!\n");
    printf("Converting start...\n");
    Convert();
    printf("Converting end!!!\n");
    printf("Enter output file name please...\n");
    scanf("%s", &filename);
    printf("Writing start...\n");
    WriteBEF();
    printf("tyty!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");

    _getch();

    return 0;
}
/********************************************************************************************/
void ReadTGA()
{
    unsigned char temp = 0;
    int i = 0;
    FILE *file;

    if (!(file = fopen(&filename, "rb")))
    {  
        Error("Can't open file!");
    }
    fseek(file, 12, SEEK_SET);
    fread(header,1,sizeof(header),file);
    if (header[4] != 24)
    {
        Error("Bad file!");
    }
    TGA.color = header[4];
    TGA.width = header[1] * 256 + header[0];
    TGA.height = header[3] * 256 + header[2];
    size = TGA.width * TGA.height * (TGA.color / 8);

    TGA.Data = (unsigned char *)malloc(size);
    fread(TGA.Data, 1, size, file);

    for(i = 0; i < size; i += 3)  
    {                                                    
        temp=TGA.Data;                      
        TGA.Data = TGA.Data[i + 2];
        TGA.Data[i + 2] = temp;                                                                
    }
   
    fclose(file);                                  
}

void WriteBEF()
{
    FILE *file;

    if(!(file = fopen(&filename, "wb")))
    {
        Error("Can't open file");
    }

    fwrite(&BEF.width, sizeof(int), 1, file);
    fwrite(&BEF.height, sizeof(int), 1, file);
    fwrite(BEF.Data, n, 1, file);
    fclose(file);
}

void Convert()
{
    char BlackTemp = 0;
    char WhiteTemp = 0;
    int i = 0;
    unsigned char TempData[100000];

    for (i = 0; i < size; i = i + 3)
    {
        if (TGA.Data == 255 && TGA.Data == 255 && TGA.Data == 255)
        {
            WhiteTemp++;
            if (WhiteTemp == 255)
            {
                TempData[n] = 255;
                n++;
                WhiteTemp = 0;
            }
            if (BlackTemp != 0)
            {
                TempData[n] = WhiteTemp;
                n++;
                BlackTemp = 0;
            }
        }
        else if (TGA.Data == 0 && TGA.Data == 0 && TGA.Data == 0)
        {
            BlackTemp++;
            if (BlackTemp == 255)
            {
                TempData[n] = 255;
                n++;
                BlackTemp = 0;
            }
            if (WhiteTemp != 0)
            {
                TempData[n] = BlackTemp;
                n++;
                WhiteTemp = 0;
            }
        }
    }

    BEF.width = TGA.width;
    BEF.height = TGA.height;
    BEF.Data = (unsigned char *)malloc(n);

    for (i = 0; i < n; i++)
    {
        BEF.Data = TempData;
    }
}

void Error(char *text)
{
    printf("%s", text);
    printf("\nPress any key to exit...\n");
    _getch();
    exit(0);
}

Вот моя нупская программа :-)
12K
31 августа 2007 года
__AleXX__
133 / / 02.04.2007
scanf("%s",&filename);
замени попробуй на scanf("%s",filename);

и не забудь под filename память выделить. (из-за этого и слетает :)) )
8.3K
31 августа 2007 года
Delphi-cs
45 / / 26.07.2005
Я так и думал, вот только сколько выделять? Как узнать сколько займет имя файла?
1.9K
31 августа 2007 года
[*]Frosty
278 / / 17.06.2006
Максимальная длина файла в NTFS - 256 знаков. В FAT - только 11.
12K
03 сентября 2007 года
__AleXX__
133 / / 02.04.2007
можно считать функцией getline строку (256 символов), а затем сосканить sscanf-ом.
353
03 сентября 2007 года
Nixus
840 / / 04.01.2007
[QUOTE='
  • Frosty;209073']Максимальная длина файла в NTFS - 256 знаков. В FAT - только 11.[/QUOTE]
    1) Ему нужна не максимальная длина имени файла, а максимальная длина пути, т.е. 260.
    2) Это в FAT16 ограничение на 11 символов (в FAT32 - 256), только где такая ФС еще существует? :-)
  • 353
    03 сентября 2007 года
    Nixus
    840 / / 04.01.2007
    Цитата: Delphi-cs
     
    Код:
    void Convert()
    {
        char BlackTemp = 0;
        char WhiteTemp = 0;
        int i = 0;
        unsigned char TempData[100000];
    ...


    :eek: Временный буффер фиксированной длины для картинки любого размера да еще и в стеке. Куда катится мир?

    1.9K
    03 сентября 2007 года
    [*]Frosty
    278 / / 17.06.2006
    Ко всему выше перечисленному добавлю пожелание автору поста (Delphi-cs) забыть о глобальных переменных и учиться передавать все нужные данные в функции в виде параметров.
    Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
    Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог