返回空字符的字符串向量

时间:2014-04-13 00:43:49

标签: c++ string vector

我正在使用ncurses编写文本编辑器,我想让程序保存我写的内容 - 文本文件。我目前所拥有的东西可以保存我写的东西,但是我在单词之间得到了一堆空字符...有时保存的字符与我输入的字符不同。我假设它与向量存储字符串的方式有关?或者推回功能可能会留下空字符?

main.cpp中:

#include<iostream> //g++ *.cpp -lncurses -o run
#include<fstream>
#include<string>
#include<ncurses.h>
#include<vector>
#include"draw.h"
using namespace std;
vector <string> file;
int nWords = 1;

int save(){
    ofstream save;
    save.open("/home/adam/editorText", ofstream::out);

    for(int i=0; i<nWords; i++)
    {
        save.write(file[i].c_str(), sizeof(file[i]));
    }
}

int colourCheck(){
    if(has_colors() == false){
        endwin();
        cout<< "ERROR: your terminal does not support colours\n";
        cout<< "exiting \n";
        return 1;
        }
    else{
        return 0;
        }
}

int init()
{
    initscr();
    raw();
    keypad(stdscr, TRUE);
    noecho();
    start_color();
}
bool on = true;

int main()
{
    string word = "";
    const char * color = "blue";
    init();
    colourCheck();
    drawGraphics draw;
    draw.setDrawBox(0, 3, 0, 20);
    draw.fillDrawBox(1, COLOR_BLACK, COLOR_BLUE);
    while(on){
        int chr= getch();

        switch(chr){

            case(32):                    //ascii value of 'space'
                file.push_back(word);
                printw("%c", chr);//
                word = "";
                nWords++;         //every time space bar is pressed: nwords++
                break;

            case(27):                 //ascii value of 'ESC'
                file.push_back(word);
                save();
                on = false;
                break;

            case(15):

            default:
                printw("%c", chr);
                word.push_back(chr);
                break;

        }


    }
    endwin();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

你的问题是:

sizeof(file[i])

sizeof()是一个编译时值。鉴于此,sizeof()如何知道字符串在运行时的长度是多少?

你想获得字符串的长度,为此你使用:

file[i].size()