C++ fscanf中的Exc\u错误访问错误

C++ fscanf中的Exc\u错误访问错误,c++,objective-c,c,xcode5,C++,Objective C,C,Xcode5,我在iOS项目的Xcode设置中运行以下代码,并在第二个fscanf命令(即fscanf(fid),%d,&fIndex)上获取EXC_BAD_访问权限(代码=2,地址0x30)

我在iOS项目的Xcode设置中运行以下代码,并在第二个
fscanf
命令(即
fscanf(fid),%d,&fIndex)上获取EXC_BAD_访问权限(代码=2,地址0x30)j=0

char word[wordLength]; // wordlength is set to 4
int numFiles = 0;
int fIndex = 0;
// create the word-fileIndex mapping
for(long i = 0; i < numWords; i++)
{
    fscanf(fid, "%s%d", word, &numFiles);
    vector<int> indexList(numFiles,0);
    for(int j = 0; j < numFiles; j++)
    {
        fscanf(fid, "%d", &fIndex);
        indexList[j] = fIndex;
    }
    wordIndexMap[word] = indexList;
}
它运行正常,从文件中读取正确的值

有人能告诉我这里发生了什么事吗

我的输入文件如下所示:

abcd编号索引index1 index2

e、 g


我认为您应该将
wordLength
设置为大于4,因为您需要包含尾部的
“\0”
。在任何情况下,在读取这样的输入时都需要小心,并限制您读取的字符数。

我认为您应该将
字长设置为大于4,因为您需要包含尾随的
'\0'
。无论如何,你需要小心的阅读这样的输入,限制你读的字符。

这看起来像C++,因此不是Objul-C或C.<代码> fSCANF是C库的一部分,我添加了Objy-C,以防万一这种东西是特定于语言+ XCODEL组合的,这看起来像C++,因此,它不是Objective-C或C。
fscanf
是C库的一部分,我添加了Objective-C,以防此类内容特定于语言+Xcode组合<应使用代码>%4s
。虽然不确定这是OPs问题的原因。正如我在问题中提到的,错误不在于读取第一个单词,它的字长=4,第一个fscanf工作正确,第二个是读取索引列表,它给出了error@Ani你没有意识到“在存储序列的末尾自动添加一个终止的空字符”表示您的代码。请参阅
fscanf()
manpage。无论如何,停止使用那些垃圾,简单地使用
我很久以前学到的一点是,如果我在寻找另一个bug时发现了一个bug,我应该首先修复它:)在这种情况下……它可能是相关的,因为您溢出了单词变量。无论如何,我找不到任何其他错误。对不起,我知道
\0
but因为这个词读起来很好…我不认为这是一个问题。使用
%4s
没有帮助,但是将字长增加到10就起到了作用。Thnx!同意;应该使用
%4s
。但不确定这是否是OPs问题的原因。正如我在问题中提到的,错误不在于阅读第一个单词,它是wordlength=4,第一个fscanf工作正常,第二个读取索引列表的fscanf给出error@Ani您没有意识到“在存储序列的末尾自动添加一个终止的空字符”对您的代码意味着什么。请参阅
fscanf()
manpage。无论如何,停止使用那些垃圾,简单地使用
我很久以前学到的一点是,如果我在寻找另一个bug时发现了一个bug,我应该首先修复它:)在这种情况下……它可能是相关的,因为您溢出了单词变量。无论如何,我找不到任何其他错误。对不起,我知道
\0
but因为这个词读起来很好…我没有把它当作一个问题。使用
%4s
没有帮助,但是将字长增加到10就可以了。Thnx!
fscanf(fid, "%s%d%d", word, &numFiles, &fIndex);
1234 2 14 15
1235 3 5 2 6
1111 1 1