ftell可以用于非ASCII字符吗?

时间:2013-01-14 21:34:00

标签: c++

这一行

Assert(pos == ftell(file)); 

用于我的代码,当文件包含非ASCII字符时,此行失败。

我该怎么办?

为清楚起见,这里更新了整个功能:

int getTerminatedString(char * dest, int length) 
{
    char * rv  = fgets(dest,length,file);
    int len = -1;
    if(rv)
    {
        len = strlen(rv);
        pos += len;
        assert(pos == ftell(file));

    }
    return len;
}

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您以二进制模式打开文件,例如无论内容如何,​​fopen("yourfile","rb")ftell都会在文件中提供偏移量。

答案 1 :(得分:0)

dest缓冲区是否足够大以包含所有字符和最终终止零字节?

如果dest指针指向的缓冲区指针太小,程序可能会在内存中覆盖它不应该的东西 - 这是获取SIGABRT的一种可能方式。