首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过sscanf使用指向指向浮点数[3]的指针的指针,获取异常

通过sscanf使用指向指向浮点数[3]的指针的指针,获取异常
EN

Stack Overflow用户
提问于 2011-12-21 17:45:15
回答 2查看 165关注 0票数 1

编辑:好的,因为我之前太含糊了,这里有一个SSCCE:

代码语言:javascript
复制
typedef float vector[3]

int mainLoaderFunc() {

    char* memory = NULL;
    size_t size = loadFile(fileName, &memory); // load model file into memory, this works, tested and true

    // create vector arrays
    vector *vertexArray = NULL;         
    vector *normalArray = NULL;         
    vector *textureArray = NULL;        

    loadArrays(size, memory, &vertexArray, &normalArray, &textureArray);

    // do other stuff with arrays

}

void loadArrays(size_t size, char *memory, vector **vertexArray, vector **normalArray, vector **textureArray) {

    int numVerts = 0; 
    int numNormals = 0;  
    int numTextures = 0;  

    char* p = memory;           // pointer to start of memory
    char* e = memory + size;    // pointer to end of memory

    // count verts, normals, textures for memory allocation
    while (p != e) {
        if (memcmp(p, "vn", 2) == 0) {
            numNormals++;
        } else if (memcmp(p, "vt", 2) == 0) { 
            numTextures++;
        } else if (memcmp(p, "v",  1) == 0) {
            numVerts++;
        } 
        while (*p++ != (char) 0x0A);
    }

    // allocate memory for vector arrays
    *vertexArray        = new vector[numVerts];
    *normalArray        = new vector[numNormals];
    *textureArray       = new vector[numTextures];


    int vertexIndex = 0;
    int normalIndex = 0;
    int textureIndex = 0;  //*** IF BREAK POINT HERE: NO EXCEPTION

    // load data from memory into arrays
    while (p != e) {

        if (memcmp(p, "vn", 2) == 0) {
            sscanf(p, "vn %f %f %f", normalArray[normalIndex][0], normalArray[normalIndex][1], normalArray[normalIndex][2]);
            normalIndex++;
        } else if (memcmp(p, "vt", 2) == 0) {
            sscanf(p, "vt %f %f", textureArray[textureIndex][0], textureArray[textureIndex][1]);
            textureIndex++;
        } else if (memcmp(p, "v", 1) == 0) {
            sscanf(p, "v %f %f %f", vertexArray[vertexIndex][0], vertexArray[vertexIndex][1], vertexArray[vertexIndex][2]);
            vertexIndex++;
        } 
        while (*p++ != (char) 0x0A);
    }

}

一旦代码到达sscanf部分,我就得到了异常,我尝试将&和*放在数组的前面,但无论哪种方式,我都会得到异常。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-23 08:04:36

sscanf在使用%f时需要一个float *vertexArrayfloat ***vertexArray[i]float **vertexArray[i][j]float*。但是,这并不是您想要的,因为vertexArray是指向vertex数组的指针,所以您需要这样做:

代码语言:javascript
复制
&(*vertexArray)[i][j]

这将使您获得要传递给sscanf的正确float *

票数 0
EN

Stack Overflow用户

发布于 2011-12-21 17:52:50

我猜您必须将地址传递给sscanf

代码语言:javascript
复制
sscanf(myMemChunk, "%f %f %f", &myVector[i][0], &myVector[i][1], &myVector[i][2]);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8587802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档