2013-03-05 3 views
0

У меня проблемы с концепцией C. Я буду впереди, это часть задания для моего класса «Специальные темы в программировании: Linux и C». Я пытаюсь сделать функции для записи определенных строк в файл (это учетная программа, а функции записывают верхние и нижние колонтитулы страниц), и я получаю сообщение об ошибке.C "аргумент имеет тип 'struct file *'"

Мой код:

#include <stdio.h> 

void writeToFile(FILE dataOut, char content[]) 
{ 
    fprintf(dataOut, content); 
} 

void main() 
{ 
    FILE *dataOut; 
    dataOut = fopen("testWrite.txt", "w"); 
    writeToFile(dataOut, "Leave no bars un-foo'd."); 
} 

Сообщение об ошибке я получаю, когда я пытаюсь скомпилировать:

testWrite.c: In function ‘writeToFile’: 
testWrite.c:5:2: error: incompatible type for argument 1 of ‘fprintf’ 
In file included from testWrite.c:1:0: 
/usr/include/stdio.h:357:12: note: expected ‘struct FILE * __restrict__’ but 
argument is of type ‘FILE’ 
testWrite.c: In function ‘main’: 
testWrite.c:12:2: error: incompatible type for argument 1 of ‘writeToFile’ 
testWrite.c:3:6: note: expected ‘FILE’ but argument is of type ‘struct FILE *’ 

Я не уверен, как это исправить. Я попытался немного манипулировать указателями, но это не изменило сообщение об ошибке. Этот код является изолированным примером того, что я хочу, чтобы мой код выполнял; если вы хотите увидеть фактический код, дайте мне знать. Это просто казалось более ясным способом выразить то, с чем я имел дело.

+0

Кажется, что вы прыгаете с пистолетом и делаете в нем очень простые ошибки; Попробуйте изучить типы объектов, прежде чем вы узнаете о функциях. – Sebivor

+0

Если бы я сам изучал это, я бы взял его медленно и учился более основательно; Тем не менее, я нахожусь на пределе, и поэтому иногда мне просто нужен ответ на вопрос, не читая главу учебника (или интернет-эквивалент). И, как я уже сказал в другом комментарии, я был уверен, что попробовал правильное решение, прежде чем задал вопрос. У меня есть приличная ручка для типов объектов, но я предположил, что для этого есть что-то большее, чем просто указатели, поэтому я спросил. – Chance

ответ

5

Изменение ваша функция принимает указатель вместо самого-структуру:

void writeToFile(FILE * dataOut, char content[]) 
+0

Знаешь, я мог бы поклясться, что попробовал, но, наверное, нет. В любом случае, я могу принять ваш ответ через десять минут. Спасибо за вашу помощь! – Chance

4

Проблема здесь состоит в том, что вы пытаетесь передать указатель на параметр, который ожидает значение без указателя. Первый параметр - writeToFile - FILE, но параметр dataOut имеет тип FILE*. Чтобы выполнить эту работу, вам нужно сделать оба значения указателя

void writeToFile(FILE* dataOut, char content[]) 
Смежные вопросы