我正在学习C,而且我来自Java背景。如果我能得到一些指导,我将不胜感激。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
char *str = "test text\n";
FILE *fp;
fp = fopen("test.txt", "a");
write(fp, str);
}
void write(FILE *fp, char *str)
{
fprintf(fp, "%s", str);
}
当我尝试编译时,我收到此错误:
xxxx.c: In function ‘main’:
xxxx.c:18: warning: passing argument 1 of ‘write’ makes integer from pointer without a cast
/usr/include/unistd.h:363: note: expected ‘int’ but argument is of type ‘struct FILE *’
xxxx.c:18: error: too few arguments to function ‘write’
xxxx.c: At top level:
xxxx.c:21: error: conflicting types for ‘write’
/usr/include/unistd.h:363: note: previous declaration of ‘write’ was here
有什么想法?谢谢你的时间。
答案 0 :(得分:8)
您缺少函数的函数原型。此外,在write
中声明unistd.h
,这就是您收到第一个错误的原因。尝试将其重命名为my_write
或其他内容。除非您打算稍后使用其他功能,否则您实际上只需要stdio.h
库作为旁注。我添加了fopen
和return 0;
的错误检查,它应该结束C中的每个主要功能。
以下是我要做的事情:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
void my_write(FILE *fp, char *str)
{
fprintf(fp, "%s", str);
}
int main(void)
{
char *str = "test text\n";
FILE *fp;
fp = fopen("test.txt", "a");
if (fp == NULL)
{
printf("Couldn't open file\n");
return 1;
}
my_write(fp, str);
fclose(fp);
return 0;
}
答案 1 :(得分:0)
请参阅linux上的man 2 write
。
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
那是原型。您需要传递整数文件描述符而不是文件指针。
如果您想要自己的功能,请将名称更改为foo_write
或其他内容
答案 2 :(得分:0)
已经有一个名为write
的系统功能。只需将您的功能命名为其他功能,在使用之前输入功能声明,您就可以了。