将std :: cin中的字符读入免费存储分配的数组中,直到出现“!”为止输入-需要帮助:)

时间:2019-05-02 13:10:55

标签: c++ pointers

注意:专门询问使用免费存储中的阵列和内存的问题 因此不能使用vector或此类工具的其他std工具。谢谢! 过去对这个问题的回答还不够,因为我想要我的代码为什么不起作用的具体帮助!谢谢!

希望有帮助! 我正在做stroustrup编程原理的c ++第二版。 问题是:“编写一个程序,将cin中的字符读取到一个数组中,然后在免费存储区中分配该数组,直到输入了感叹号(!)。” 还特别要求不要使用std :: string。

我尝试了以下代码:

using namespace std;
void grow_array(char* s, int size) { //grow current array to the size of int size. assumption - size is bigger than the current size of array s
    if (s == 0)return;
    char* big  = new char[size];
    for (int i = 0; s[i]; ++i)
        big[i] = s[i];
    delete[]s; //delete to prevent memory leak
    s = big; // is this ok?
}
int main()
{
    char ch = ' ';
    int size = 10;
    char* s = new char[size];
    for (int i = 0; cin >> ch && ch != '!';++i) {
        if (i + 1 == size) {//grow array every 10 character instances
            size += 10;
            grow_array(s, size);
        }
        s[i] = ch;
    }
    cout << s;
}

我希望输出是实际的字符数组,但它仅仅是 一定大小时适用。而是程序会卡住,然后关闭,在调试模式下它告诉我引发了一些内存冲突异常。

我不明白的是,从某个不那么大的大小中我得到了异常错误(对于某些我找不到的奇怪的Visual Studio错误)。所以这段代码并没有真正起作用,我希望得到一些帮助,以了解为什么它不起作用,错误是什么,需要更改什么以及以不同的方式回答这个问题。 谢谢分配!

修改

why does the following code work and mine doesnt?

// copy C-style string into new array one element bigger
char* add_size(const char* s) {
    if (s==0) return 0;

    // get number of char in s
    int n = 0;
    while (s[n] != 0)
        ++n;

    // allocate memory with room for terminating 0
    char* pc = new char[n+2];

    // copy string
    for (int i = 0; s[i]; ++i)
        pc[i] = s[i];
    pc[n] = 0;  // zero-terminated

    delete[] s;
    return pc;
}

int main()
try {
    char ch;
    char* my_array = new char[1];
    *my_array = 0;
    while (cin>>ch && ch!='!') {
        my_array = add_size(my_array);
        int i = 0;
        for (; my_array[i]; ++i);
        my_array[i] = ch;
        my_array[i+1] = 0;
    }

    cout << my_array << "\n";
    delete[] my_array;
}

0 个答案:

没有答案