gpt4 book ai didi

c - C 中使用 read() 系统调用读取字符串

转载 作者:行者123 更新时间:2023-11-30 15:14:53 24 4
gpt4 key购买 nike

我需要实现一个 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;
}

最佳答案

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

我认为您误解了 sizeof 的作用。它会计算出您要求它计算出的物体的大小。在本例中,它是 buf,它是一个 char *。所以你基本上是在问它指向一个字符的指针需要多少字节。据推测,您需要缓冲区的大小。所以你的函数需要它作为附加参数。

关于c - C 中使用 read() 系统调用读取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33848495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com