【问题标题】:C++ function that works like substr() in PHPC++ 函数类似于 PHP 中的 substr()
【发布时间】:2012-01-11 02:11:31
【问题描述】:
char * extract(FILE * handle, int from, int len=0)
{
    long fsize = filesize(handle);
    fseek(handle, from, SEEK_SET);
    len = (len > 0) ? fsize : fsize;
    char * new_data = new char[len];

    for(int i = 0; i < len; i++)
        new_data[i] = getc(handle);

    return new_data;
}

int main()
{
    FILE * file1 = fopen("output.txt", "rb");
    char * buffer = extract(file1, 0);
}

我想在 PHP 中创建一个类似于 substr() 的函数,但它只适用于二进制文件而不是文本,以上是我想出的。它似乎有效,但我想知道我是否使用了正确的方法。

【问题讨论】:

  • 很多事情你不应该在这里做,但最明显的问题是你一次读取一个字符(性能杀手),如果 len == 0from != 0 和最后,这真的是 C 代码,而不是 C++。
  • 这个语句有什么作用? “len = (len > 0) ? fsize : fsize;”无论 len 是否非零,它都会将 len 设置为 fsize。错误?
  • 应该是“long from”以避免大文件出现问题。

标签: c++


【解决方案1】:

使用

代替 for {} 循环
fread(new_data, 1, len, handle)

还有,

len = (len &gt; 0) ? fsize : fsize

始终将 len 设置为文件大小。也许你想要:

len = (len &gt; 0) ? len : fsize

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多