0

从文件读取时出现问题。下面的代码在像 100 循环之后以运行时错误结束,在跟踪后发现 mybuffmy 没有用 ( mybuff = new char [1024];) 重新初始化,因为在调试后我仍然看到它末尾的 prvious 消息。当我尝试填写时,问题就会发生,sendbuff因为同样的问题。关于“访问冲突读取位置”的错误发生在这一步(sprintf(sendbuff,mybuff )

知道如何解决这个问题吗?

char sendbuff[1024];
char * mybuff = new char[];
While(....){
    mybuff = new char [1024];
    myfile.read(mybuff ,bufsize);
    sprintf(sendbuff,mybuff );
    ibytessent=0;    
    tmpCount = strlen(sendbuff);
    ibufferlen = strlen(sendbuff);
    ibytessent = send(s,sendbuff,ibufferlen,0);
delete [] mybuff ;
}
4

2 回答 2

0

我也认为运行时错误是由上面的 read() 函数引起的,另外我认为没有必要在每次迭代时重新新的 1024 字节空间,为什么不重用缓冲区呢~

顺便说一句,我尝试重现您的问题,我不确定下面的代码是否与您的相同,并且我没有收到任何运行时错误

#include <cstdio>
#include <fstream>
using namespace std;
int bufsize = 1024;
int main(){
    char sendbuff[1024];
    char * mybuff = new char[];
    std::ifstream ifs;
    ifs.open ("test.txt", std::ifstream::in);
    while(1){
        mybuff = new char [1024];
        ifs.read(mybuff ,bufsize);
        sprintf(sendbuff,mybuff );
        int ibytessent=0;    
        int tmpCount = strlen(sendbuff);
        int ibufferlen = strlen(sendbuff);
        //ibytessent = send(s,sendbuff,ibufferlen,0);
        delete [] mybuff ;
    }
    return 0;
}
于 2013-10-09T02:00:26.510 回答
0

我认为你打电话的方式ifstream::read()是错误的。read()不会在末尾为您添加空字符,您需要检查eofbitand failbit

从手册中引用,

该函数成功读取和存储的字符数可以通过调用成员gcount来获取。

于 2013-10-09T01:55:51.220 回答