我怎么能直观地插入一个字符串的着色器统一在C?



这段代码在c++中是可以工作的,但是在C中它给了我一个错误:

setvVec3("objs[" + oo + "].color", obj.color);

和错误:

binary +的无效操作数(包含' char * '和' char * ')">

传统的方法是使用sprintf来使用格式化缓冲区,如下所示:

int bsize = 100;
char buffer[bsize];
snprintf(buffer, bsize "objs[%s].color", obj.color);

只要obj.color不是太长,这将工作。从技术上讲,你应该注意返回代码,以确保它是成功的。

注意这里使用的snprintf,这是sprintf的安全版本。旧的sprintf函数会在没有警告的情况下溢出缓冲区,并可能在程序中导致严重的错误。snprintf是相同的,但有limit参数。

正如@kol指出的那样,在C中不能使用+运算符连接字符串:但是可以使用strcat函数。如果您想使用strcat来连接这三个字符串,您的代码将需要看起来像这样:

/* assuming oo is a char* */
char str[100] = "objs[";

setvVec3(strcat(strcat(str, oo), "].color"), obj.color);

请注意,我选择的数组大小是随机的,但请记住,目标字符数组的大小需要足够大,以容纳连接的字符串,否则您可能会溢出不必要的内存。

要查找有关C函数strcat的更多信息,请查看此链接:https://man7.org/linux/man-pages/man3/strcat.3.html

编辑:既然您说oo是一个整数,那么您将需要使用函数snprintf将其额外转换为字符数组,如下所示:

/* assuming oo is a not char*, but rather an int */
char str[100] = "objs[";
char ootochar[10];
snprintf(ootochar, 10, "%d", oo);
setvVec3(strcat(strcat(str, ootochar), "].color"), obj.color);

最新更新