Проблема с программой на языке c - Компьютерные вопросы

Вопрос Проблема с программой на языке c

Регистрация
11 Сен 2013
Сообщения
81
Репутация
0
Спасибо
0
Монет
0
example.c

#include <stdio.h>

#include <stdlib.h>



// этот врап тут нужен

char *__wrap_read(const char *filename) {

FILE* file = fopen(filename, "r");

if (file == NULL) {

perror(filename);

return NULL;

}



if (fseek(file, 0, SEEK_END) != 0) {

fclose(file);

fprintf(stderr, "error: fseek");

return NULL;

}



long fileSize = ftell(file);

if (fileSize == -1L) {

fclose(file);

fprintf(stderr, "error: ftell");

return NULL;

}



rewind(file);



char* buffer = calloc(fileSize + 1, sizeof(char));

if (buffer == NULL) {

fclose(file);

printf("error: calloc\n");

return NULL;

}



fread(buffer, sizeof(char), fileSize, file);

fclose(file);

return buffer;

}

example.h

#ifndef _EXAMPLE_H

#define _EXAMPLE_H



char *read(const char *s);



#endif

main.c

#include <stdio.h>

#include <stdlib.h>

#include "example.h"



int main(int argc, char **argv) {

if (argc != 2) {

fprintf(stderr, "Usage: %s file\n", argv[0]);

return -1;

}

char *p = read(argv[1]);

if (p == NULL)

return -2;



printf("`%s`", p);

free(p);

return 0;

}

gcc -c -o example.o example.c

gcc -shared -o example.dll example.o

gcc -o main main.c "-Wl,--wrap=read" -L. -lexample





Написал такую программу но вместо нужно результата она мне выдаёт просто
308561886_d53fc155a563c35f4d492fb1a2a6d102_800.png

тест задания такой Создать динамическую библиотеку (dll или so) в которой будут два метода read(<имя текстового файла>), который считывает информацию из файла и возвращает тип данных char[], и read(<строка>,<имя текстового файла>), который является методом типа void и записывает строку в файл.

подскажите где я ошибся
 
Регистрация
22 Дек 2013
Сообщения
82
Репутация
0
Спасибо
0
Монет
0
Если ошибки в консоли нет, а консоль не выводит то, что нужно, то значит ошибка в коде и в выводимых данных.
printf - print formatted не подходит если есть пробелы в строке, например.
fgets(sentence, 1024, stdin); подойдет лучше, где sentence (это строка, 1024 -длина, stdin -метод)
Такой вывод данных для строк легче использовать.
Это одна из базовых ошибок, не рекомендую копировать чужой код.
 
Регистрация
23 Мар 2013
Сообщения
77
Репутация
0
Спасибо
0
Монет
0
В следующий раз, кидай код в pastebin (или его аналоги), код нечитабелен
 
Регистрация
27 Окт 2013
Сообщения
80
Решения
1
Репутация
0
Спасибо
0
Монет
0
Вы используете механизм оборачивания функции read, что подразумевает создание собственной реализации функции read. Это может работать, но есть несколько моментов, которые нужно учесть:

Используйте обратные кавычки (``) вместо угловых кавычек (< и >) в вашей документации. Таким образом, <имя текстового файла> должно выглядеть как <имя_текстового_файла>.

Вам нужно правильно определить обертку для функции read. В данном случае, это __wrap_read. Убедитесь, что вы используете правильное имя обертки.

Передавайте аргументы из вашей функции main в обертку. Из вашего кода это не видно, но вы должны передать имя файла argv[1] в функцию __wrap_read.

Удостоверьтесь, что ваша библиотека правильно загружается в вашем исполняемом файле main. Проверьте, что файл example.dll находится в том же каталоге, где вы запускаете main, или укажите полный путь к нему.
 
Регистрация
18 Дек 2013
Сообщения
79
Репутация
0
Спасибо
0
Монет
0
Ошибка в том, что это не твоя программа. Пиши сам - будет тебе счастье.
 
Сверху Снизу