Смена типов переменных Си

компьютеры программирование линукс Си gcc

Хотелось бы сменить тип переменной int на массив char. Itoa не предлагать. Про union'ы слышал, однако я пока что новичок и вряд ли с ними разберусь. Решил писать int в файл, а оттуда его считывать и посимвольно добавлять в массив. Конечно, это делает программу системнозависимой (Linux Ubuntu 9.10), однако больше ничего не придумал... В общем вот код:

#include <stdio.h>

main()
{
int t, n, g, i, c, v, r;
char ct[i];
c=0;
n=65534;
scanf("%d", &t);
FILE *tmpfile(void);
write(*tmpfile, t, n);
for(i=0; (g=getchar())!=EOF; i++)
{}
i++;/*fgets: i-1*/
while((fgets(&ct[i], i, *tmpfile))!=NULL)
{};
return 0;
}

Компилятор выдает лишь замечание:

/usr/include/stdio.h:604: note: expected ‘struct FILE * __restrict__’ but argument is of type ‘struct FILE * (*)(void)’

Однако проблема не в этом, ошибка была и до добавления fgets, просто решил завершить эту часть кода, перед тем как выкладывать, а то стыдно) Кстати не понял о чем замечание - понятно на тип ругается, но какой тип он тогда хочет?!
А ошибка обнаруживается только после компиляции:

home@ubuntu:~/Мои_программы$ gcc XOR2.c
XOR2.c: In function ‘main’:
XOR2.c:15: warning: passing argument 3 of ‘fgets’ from incompatible pointer type
/usr/include/stdio.h:604: note: expected ‘struct FILE * __restrict__’ but argument is of type ‘struct FILE * (*)(void)’
home@ubuntu:~/Мои_программы$ ./a.out
Segmentation fault

P.S. В коде может быть заменить i++ на i=i+2, т.к.

Примечание:
В каком смысле не делается? Не делается ошибка или весь код логически неверен?

Примечание:
#include <stdio.h>

main()
{
int t, n, g, i, c, v, r;
char ct[i];
c=0;
n=65534;
scanf("%d", &t);
FILE* f = fopen("/home/home/file.txt", "wt"); /*извините за тавтологию, директория (стандартная) home + юзер home*/
fputs("hello", f);
for(i=0; (g=getchar())!=EOF; i++) /*никак не убрать - это подсчет*/
{}
i++;/*fgets: i-1*/
fgets(&ct[i], i, *tmpfile); /*так запишет только первую строчку, включая \n (в Windows /n)*/
return 0;
}

Примечание:
Та же ошибка. да еще при компиляции:
XOR3.c:15: warning: passing argument 3 of ‘fgets’ from incompatible pointer type

Примечание:
Функции:
int read;
char fgets;
Мне нужен массив символов => char fgets

Примечание:
давай пока сюда, а то тут привата нет
[email protected]

Примечание:
Спасибо Ipmonster, вот код:
int i, n;
char ch[4];
n = 0xaabbccddee;
char* ptr = (char*)(&n);
Ответы:
/usr/include/stdio.h:604: note: expected ‘struct FILE * __restrict__’ but argument is of type ‘struct FILE * (*)(void)’
Не делается - это в смысле, что с обычными файлами правильно так:
FILE* f = fopen("/home/me/file.txt", "wt");
fputs("hello", f);
и лучше наверное использовать read вместо fgets, раз файл открыт не в текстовом режиме.
Ну ладно, щас проверю. Самому интересно.
У тебя есть средства связи?
Есть очень простой способ без геморроя с файлами.Это ф-ция sprintf()


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.