6

我正在学习 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

有什么想法吗?谢谢你的时间。

4

3 回答 3

10

您缺少函数的函数原型。此外,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;
}
于 2013-04-01T05:25:26.187 回答
0

man 2 write在 linux 上查看。

#include <unistd.h>

     ssize_t write(int fd, const void *buf, size_t count);

那就是原型。您需要传递一个整数文件描述符而不是文件指针。如果你想要你自己的函数把名字foo_write改成什么的

于 2013-04-01T05:25:14.350 回答
0

已经有一个名为write. 只需将您的函数命名为其他名称,在使用之前添加一个函数声明,就可以了。

于 2013-04-01T05:25:36.963 回答