【发布时间】:2022-01-01 12:45:56
【问题描述】:
我正在使用 OpenGL,不用担心我的问题是 C 而不是与 OpenGL 相关的问题。在 OpenGL 中,我们有一个叫做着色器的东西。它是一个文本文件。我要做的就是读取该文本文件并将其传递给仅接受const char * const* 的函数。 (例如,func(&shaderSource) 和 shaderSource 必须是 const char* shaderSource。)。我只想要这个带有多个文件的术语。我可以吗?我看到有人用 C++ 做这件事,但我在项目中选择了 C 而不是 C++。这是我的一些失败尝试。
char vertexShaderContent[1000] = readfile("Shader/default.frag.txt");
const char *vertexShaderSource;
strcpy(vertexShaderSource, vertexShaderContent);
在这里,我尝试获取一个新变量(顺便说一下,这是在main 函数中),它执行该函数并获取该函数的返回值。现在我确实复制了那个字符串(使用strcat)将vertexShaderContent 的值分配给vertexShaderSource。顺便说一下,这是我的readfile 代码:
char *readfile(const char* filename) {
char *res = malloc(sizeof(char *) * 100);
char *word = malloc(sizeof(char *));
FILE *file = fopen(filename, "r");
while (fgets(word, sizeof(word), file) != NULL) {
strcat(res, word);
}
strcat(res, "\n\0");
fclose(file);
return res;
}
总结
我所有的问题是我想将char* 传递给接受const char*s 的函数。如果我不能,有什么方法可以让这个“多个”文件工作吗?
谢谢。
【问题讨论】:
-
const char *vertexShaderSource = readfile(...);? -
代码为文字,请勿以图片形式发布
-
您的代码中还有很多其他错误,从错误的分配大小开始(
sizeof(char*)而不是sizeof(char)),在未初始化的缓冲区上调用strcat并尝试@ 987654338@变成一个未初始化的指针 -
将指向 vertexShaderContent 的指针传递给 readFile 而不是使用 malloc。
-
@UnholySheep 这不会出错,而且工作正常。我知道这不是最佳做法。也许我可以稍后修复它。我也不会再发图片了
标签: c