使用strcpy时C ++访问冲突读取位置

时间:2018-03-30 03:08:38

标签: c++ file io

在Ubuntu终端中编译的命令是g++ scrap.c -std=c++11

我查看了其他几个有相同错误的问题,但没有使用strcat,这是我发生异常的地方。

我尝试将所有字符从test1复制到temp[],每次只有512个字符的块,但我得到一个异常Access violation reading location 0x...

我要做的另一件事是将温度加载到fileArray[]的项目中,但我的代码底部的strcpy给我no suitable conversion from str to "char *" exists

我努力提供一个“完整的,最小的,可验证的例子”,因为管理员现在似乎正在努力推动这个问题。如果我在这里做的话,请告诉我。你应该能够复制我的代码并用g ++编译它来检查它。

scrap.c(已更新):

//#include <stdafx.h>
//#include "stdafx.h"
#include <stdio.h>  /* defines FILENAME_MAX */
#include <assert.h>
#include <iostream>
#include <fstream>
#include <cstring>
//#include <filesystem>
#include <experimental/filesystem>
#include "dirent.h"
//#include <direct.h>
using namespace std;


int main() {
    string test1 = "This is test1.txt...This is test1.txt...";
    std::vector<std::string> fileArray[10];

    string temp = "";

    for (int a = 0; a < 10; a++) {
        int block = 512 * a;
        int currentBlockPosition = 0;
        while (currentBlockPosition < 512 && (currentBlockPosition + block) < test1.size()) {
                    temp += test1.at(block + currentBlockPosition);
                    cout << "block + currentBlockPos: " << block + currentBlockPosition << endl;
                    cout << "current char: " << test1.at(block + currentBlockPosition) << endl;
                    currentBlockPosition++;
            }
            temp = "";
            cout << "temp: " << temp << endl;
            cout << "a: " << a << endl;
            //fileArray[a] =  temp; // no operator "=" matches these operands    ... operand types are: std::vector<std::string, std::allocator<std::string>> = std::string
    }
}

1 个答案:

答案 0 :(得分:0)

找到了解决方案。

访问冲突错误与我使用char []而不是string有关。

使用fileArray->push_back(temp);证明是正确的语法,而不是fileArray[a] = temp

另外,我必须在while()中添加第二个条件以避免出界限错误。