gpt4 book ai didi

c - C 中的 %d 内部变量文件名

转载 作者:太空宇宙 更新时间:2023-11-04 05:03:28 24 4
gpt4 key购买 nike

制作一个记录数据的程序。我希望它在每次达到设定的文件空间限制(以字节为单位)时以递增的整数开始一个新文件。

一切正常,直到我使用:

file_name = ("Data%d.bin",fileIncrement);

代替:

file_name = "Data.bin";

当我替换上面的内容时,软件不再写入文件。

这里是有问题的函数:

    char *file_name;
static int fileSize = 0; //bytes
static int fileIncrement = 1;

//Set file name
if (fileSize == 0)
{
file_name = ("Data%d.bin",fileIncrement);
++fileIncrement;
}

fileSize += size;

if (fileSize >= 1024)
{
fileSize = 0;
}

// Write to file system
...
...
...
}

我最初尝试使用时间戳,但没有用,于是又回到了最基本的状态。

最佳答案

fopenopen 等的文件路径是一个字符串。您可以构建该字符串,例如使用 snprintf ,例如

char filepath[256];
snprintf (filepath, sizeof(filepath), "Data%d.bin", fileIncrement);
FILE * fil = fopen(filepath, "w");
if (!fil) { perror(filepath); exit(EXIT_FAILURE); };

阅读文档 fopen(3) , perror(3) , exit(3) , snprintf(3) -以及您正在使用的每个功能-;您需要添加更多的 #include 指令。

避免使用 sprintf(但使用 snprintf),因为您应该害怕 buffer overflow及其他undefined behavior .

您甚至可以测试 snprintf 的结果以确保它成功并适合 filepath

在编译时,启用调试信息和所有警告(即,如果使用 GCC,则使用 gcc -Wall -g 进行编译)。然后使用调试器(例如gdb)

关于c - C 中的 %d 内部变量文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26359496/

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