我尝试实现一个函数,它打开一个obj文件,从第二个字符开始循环遍历一行中的每个字符,因为第一个和第二个字符只是“v”,代表顶点。不知何故,我得到了一个访问冲突错误。下面是代码:
bool LoadFromObjectFile(char* filepath) {
FILE* pF;
fopen_s(&pF, filepath, "r");
if (pF == NULL)
return false;
char buffer[128];
while (fgets(buffer, sizeof(buffer), pF) != NULL) {
if (buffer[0] == 'v') {
int currCoord = 0;
char* vCoords[3] = { "", "", ""};
for (int i = 2; i < sizeof(buffer); i++) {
if (buffer[i] == ' ') {
currCoord++;
continue;
}
strcat_s(vCoords[currCoord], sizeof(&buffer[i]), &buffer[i]);
}
}
}
printf("%s\n", buffer);
fclose(pF);
return true;
}
我尝试使用strcat函数将当前字符添加到其中一个vCoords中。我以为它会立即工作,但我得到一个错误,我不知道为什么。
1条答案
按热度按时间bprjcwpo1#
你已经得到了一个很好的三个指向字符串字面量的指针数组。
您正尝试在此处修改字符串文字。这是不允许的。即使你可以修改一个字符串字面量,你不能,你使用的
sizeof(&buffer[i])
* 在几个级别上是完全错误的 *,你的字符串字面量 * 足够大,可以包含一个空字符串,没有其他东西 *。实际上根本不清楚你想做什么。循环似乎没有任何可见的效果。你只需要在循环后打印文件的最后一行。这就是你的功能所做的一切。
如果你想从每一行中取出三个空格分隔的标记,你可以用
strtok
函数来完成,近似方式如下(警告,未经测试的代码):当然,你想用
vCoords
做一些事情,否则你可以用一对空的大括号替换这个函数。