0

我需要实现一个 C 函数

ssize_t readString(int filedes, char* buf, ssize_t max);

从与文件描述符 'filedes' 关联的文件中读取字符串到缓冲区 'buf' 并返回读取的字节数。'max' 变量不是必需的。

换句话说,我想使用

readString(fileDescriptor, buf);

我会用同样的方式

fscanf(inputFile, "%s", buf);

下面我提到了我到目前为止所做的事情,但它并不总是很好用。你对我的代码有什么建议吗?你能建议更好地实现这个功能吗?

谢谢

ssize_t readString(int filedes, char* buf){
    char *temp;
    int n = sizeof(buf)/sizeof(char); int i;
    ssize_t rbytes = 0; /* bytes read */
    size_t cbyte = sizeof(char);

    /* check if file is empty */
    if (read(filedes, temp, cbyte) < 1)
        return 0;

    /* eat spaces */
    while ( (*temp == ' ') || (*temp == '\n') || (*temp == '\t') )
        if (read(filedes, temp, cbyte) < 1)
            return 0;

    /* read string */
    for (i=0; i<n-1; i++){
        buf[i] = *temp;
        rbytes++;

        /* check if file is over */
        if (read(filedes, temp, cbyte) < 1)
            return rbytes;
        /* check if string is over */
        if ( (*temp == ' ') || (*temp == '\n') || (*temp == '\t') )
            break;
    }

    buf[++i] = '\0';
    return rbytes;
}
4

1 回答 1

1
ssize_t readString(int filedes, char* buf){
    char *temp;
    int n = sizeof(buf)/sizeof(char); int i;

我想你误解了什么sizeof。它算出你要求它算出大小的东西的大小。在这种情况下,那是buf,这是一个char *。因此,您基本上是在询问指向字符的指针需要多少字节。大概,你想要缓冲区的大小。因此,您的函数需要将其作为附加参数。

于 2015-11-21T21:03:15.383 回答