【发布时间】:2023-02-22 21:37:58
【问题描述】:
我有这个:
#include <stdio.h>
#include <string.h>
int main(void){
const char* pFilename = NULL;
pFilename = "Something.png"
functionX(pFilename, argX);
}
但是,我想在循环中调用该函数,使用不同的文件名,如“Something0.png”、“Something1.png”等
经过一番挖掘,我想出了这个:
#include <stdio.h>
#include <string.h>
int main(void){
const char* pFilename = NULL;
char buffer[4];
char nameStd[] = "Something";
char namePng[] = ".png";
char nameAll[17];
pFilename = "Something.png"
for (i = 0; i < 100; i++) {
snprintf(buffer, sizeof(buffer), "%d", i);
strcat(nameAll, pFilename);
strcat(nameAll, buffer);
strcat(nameAll, namePng);
functionX(nameAll, argX);
memset(nameAll,0,strlen(nameAll));
}
}
好吧,我不确定这是否有效。而且我现在无法执行代码(因为 functionX 需要特定的外围设备)。
但即使它确实有效,它真的是最省时的方法吗?
【问题讨论】:
-
也许最快的方法是将字符串“Something___.png”和 sprintf 数字直接放入 _ 所在的位置(使用 %03d,或者如果您不想要尾随零,则使用“%d.png”),那么您不需要根本不需要做字符串复制
-
char nameAll[17];为什么要省吃俭用?char nameAll[ 32 ]; sprintf( nameAll, "Prefix%d.png", i );一个声明......并且,之后不要重置缓冲区。不必要...编写有效的代码,不用担心性能...计算机不再由真空管制成... -
有点偏离主题,但是
char nameAll[17]; strcat(nameAll, pFilename);是未定义的行为,因为 nameAll[] 尚未被清除(即不是您可以 strcat 到的有效字符串)。第一次使用strcpy,或者只使用nameAll[0] = '\0' -
时间效率?这应该不是一个真正的问题,生成 100 个文件名,无论使用何种方法,都不会消耗大量时间。最简单的是使用
sprintf(nameAll,"Something%d.png",'i);之类的东西 -
@ATSlooking4things 是的。
标签: c string performance strcat