【发布时间】:2019-03-27 14:14:49
【问题描述】:
我在编译本来可以正常工作的程序时遇到问题,但是,在编译警告时尝试将 strcpy 和 strcat 压缩为 snprintf(以删除不必要的代码行)
传递“snprintf”的参数 2 从指针生成整数而无需强制转换
呈现自己。我试过四处寻找有这个问题的其他人,但是一旦调整他们的解决方案似乎不适用于我的代码
fileDir 在程序开始时定义为:char fileDir[1000];
event->name 是文件名(及其扩展名),例如图片1.jpg。
hashDirectory 是"/home/user/Documents/_Hash"。
FILE *ftest2=fopen(snprintf(fileDir, "%s: %s: %s", hashDirectory, event->name, ".txt"), "wt");
我可以打开文件,但是只有在我使用 strcpy 和 strcat 时才能打开文件——这是我想要摆脱的。
【问题讨论】:
-
将太多代码塞进一行的一个非常非常糟糕的副作用是在它不起作用时无法调试它......
-
那是因为第二个参数是
size_t而不是字符串。在此处查看函数的文档cplusplus.com/reference/cstdio/snprintf 并相应地修复您的函数调用。 -
@Blaze ...因为
snprintf返回int,而fopen接受const char *作为其第一个参数。 -
您要创建什么文件名?您有一个包含扩展名的文件名,并在其中添加
": .txt" -
@Gerhardh 只是一个 .txt 文件,但删除原始文件扩展名是另一个问题哈哈。