gpt4 book ai didi

c - 使用 fread 的代码中是否存在错误

转载 作者:可可西里 更新时间:2023-11-01 11:50:37 27 4
gpt4 key购买 nike

int main()
{
FILE *read_fp;
char buffer[BUFSIZ + 1];
int chars_read;

memset(buffer, '\0', sizeof(buffer));
read_fp = popen("cat popen*.c | wc -l", "r");
if (read_fp != NULL) {
chars_read = fread(buffer, sizeof(char), BUFSIZ, read_fp);
while (chars_read > 0) {
buffer[chars_read - 1] = '\0';
//buffer[chars_read] = '\0';
printf("Reading:-\n %s\n", buffer);
chars_read = fread(buffer, sizeof(char), BUFSIZ, read_fp);
}
pclose(read_fp);
exit(EXIT_SUCCESS);
}
exit(EXIT_FAILURE);
}

fread() returns the number of items successfully read

我认为下面这行应该改成

buffer[chars_read - 1] = '\0';

buffer[chars_read] = '\0';

我做对了吗?

最佳答案

您是否尝试以 NULL 终止读取的字符串?如果是这样,那么是的,buffer[chars_read] = '\0'; 将是做到这一点的方法。

除此之外,如果你这样做的话,你的循环结构会更容易理解

do (
chars_read = fread(....);
if ( chars_read > 0) {
buffer[chars_read] = '\0';
printf(....);
}
} while (chars_read > 0);

或更传统

while ((chars_read = fread(....)) > 0) {
buffer[chars_read] = '\0';
printf(....);
}

关于c - 使用 fread 的代码中是否存在错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6645461/

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