LINUX.ORG.RU

В чем проблема, не собирается?

Смотри ругань, и в том файле, где ругается, вставь явное приведение типов (FILE*).

Obidos ★★★★★
()

Спасибо,что откликнулся.Не затруднит ли тебя, для чайника ,на пальцах, явно указать ,где следует сделать дополнение? Вот ругань: src/parsetables.c: In function `parse_table`: src/parsetables.c: 34: warning: dereferencing `void *` pointer src/parsetables.c: 34: request for member `_flags` in something not a structure

А вот parsetables.c : ---------------------------

#include "asrecod.h"

short hex_to_dec(char *hex_string) { int i = 0; unsigned char current_digit = 0; short result = 0;

for (i = strlen(hex_string) - 1; i >= 0; i--) { if ((hex_string[i] >= 0x30) && (hex_string[i] <= 0x39)) current_digit = hex_string[i] - 0x30; else if ((hex_string[i] >= 0x61) && (hex_string[i] <= 0x66)) current_digit = hex_string[i] - 0x61 + 0x0a; else if ((hex_string[i] >= 0x41) && (hex_string[i] <= 0x46)) current_digit = hex_string[i] - 0x41 + 0x0a; else { strcat(strcat (strcpy (error_string, "error while parsing one of table files: `"), hex_string), "' is not a hex number"); fatal_error(NOT_A_HEX); } result = result + current_digit * pow(16, strlen(hex_string) - 1 - i); } return (result); }

void parse_table(char it_is_src, void *charset_to_unicode, void *table_file) { char current_string[MAX_STR_LEN + 1]; char *string;

while (!feof(table_file)) { string = fgets(current_string, MAX_STR_LEN, table_file); if (parse_string(string)) { strncpy(key, &key[2], 2); key[2] = 0; strncpy(value, &value[2], 4); value[4] = 0; if (it_is_src) ((short *)charset_to_unicode)[hex_to_dec(key)] = hex_to_dec(value); else ((char *)charset_to_unicode)[hex_to_dec(value)] = hex_to_dec(key); } } }

void **parse_tables(FILE *src_table_file, FILE *dest_table_file, int mode) { int i; short (*src_to_unicode)[256]; char (*unicode_to_dest)[65536]; void **ret_arr;

src_to_unicode = mal(512); unicode_to_dest = mal(65536); for (i = 0; i < 128; i++) (*src_to_unicode)[i] = i; for (i = 128; i < 256; i++) (*src_to_unicode)[i] = '?'; memset(unicode_to_dest, '?', 65536); for (i = 0; i < 128; i++) (*unicode_to_dest)[i] = i; if ((mode != FROM_UNI) && (mode != FROM_UTF8)) parse_table(1, src_to_unicode, src_table_file); if ((mode != TO_UNI) && (mode != TO_UTF8)) parse_table(0, unicode_to_dest, dest_table_file); if (mode == ONEBYTE) { for (i = 0; i < 128; i++) src_to_dest[i] = i; for (i = 128; i < 256; i++) src_to_dest[i] = (*unicode_to_dest)[(*src_to_unicode)[i]]; } /* if (mode == ONEBYTE) { free(src_to_unicode); free(unicode_to_dest); return NULL; } */ ret_arr = mal(2 * sizeof(void *)); ret_arr[0] = src_to_unicode; ret_arr[1] = unicode_to_dest; return ret_arr; }

----------------------------- Вот вроде 34 стр. while (!feof(table_file)) { string = fgets(current_string, MAX_STR_LEN, table_file); Если можно покажи мне явно,как прописать.

anonymous
()

Прошу прощения.Стркутура в постинге не сохранилась.

anonymous
()

Было (строка 34):

while (!feof(table_file))

Стало:

while (!feof((FILE*)table_file))

То бишь добавляем (FILE*), более ничего не трогая.

P.S. Кстати, в Makefile вхождения koi8-u на koi8-r поменял? Или для тебя украинский родной?

P.P.S. С языком C не совсем не дружим?

Obidos ★★★★★
()

Спасибо. > Кстати, в Makefile вхождения koi8-u на koi8-r поменял? Или для тебя >украинский родной? Поменял сразу же.Я чес.слово не ленивый.Makefile/README/INSTALL всегда первым делом читаю. >С языком C не совсем не дружим? Совсем не дружим.Я не более чем любопытствующий чайник.Просто ради интереса поставил месяца два назад FreeBSD ,-страшно понравилось. Вот теперь колупаюсь. Ещё раз спасибо.Поставилось без проблем(после изм-я).Прекрасно работает.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.