c - 为什么我们应该在将缓冲区发送到函数之前使用它

标签 c function buffer

我读过这篇文章,我只知道缓冲区是 RAM 中未指定长度的数据

    char buf[100];
    snprintf(buf, sizeof(buf), "%s.txt", "abc");
    FILE *f = fopen(buf, "r");

它是如何工作的? 为什么我们应该在函数中使用 buffer 作为参数? 为什么不呢

    char buf[100] = "abc.txt";
    FILE *f = fopen(buf, "r");

工作?

最佳答案

实际上,后一种方式也可以。然而,在许多情况下,您需要在运行时形成文件名,这意味着您必须使用 snprintf() (您使用 sprintf(),你是吗?)来构建文件名。例如,这可能如下所示:

int user_id = get_user_id();
char fname[PATH_MAX];
/* for each user data is in a file <user_id>.txt */
snprintf(fname, sizeof(fname), "%d.txt", user_id);
fp = fopen(fname, "r");

在您的(非常简单的情况)中,您可以做得更简单:

fp = fopen("abc.txt", "r")

关于c - 为什么我们应该在将缓冲区发送到函数之前使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19262014/

相关文章:

c - 对于wcscmp()和wcscoll()来说是宽字符比较。什么是差异?

python - 什么更快 : multiple `send` s or using buffering?

c# - 流流 = WriteableBitmap.PixelBuffer.AsStream() 丢失

c++ - 从 unflush 二进制文件中读取

c - mmap 期间 memcpy 重叠的段错误

c - 调整 PCM 阵列大小而不重新采样

c - 数组组织(C 编程)

c - 在C中生成两个不同的随机数

c - 如何为接受函数指针的函数提供参数

javascript - this.method = function(){} VS obj.prototype.method = function (){}