-7

天哪,我现在很困惑

这里有什么问题,我能做些什么来解决它

编辑:天哪,我很抱歉......我现在情绪波动很大,我什至不能问一个问题

我想将 10 个输入的字符字符串分配给一个指针数组。

using namespace std;

int main(int argc, char *argv[])
{
    char *mess[10];
    int i = 0;

for (; i < 10; i++)
{                 
    cout << "Enter a string: ";   
    cin.getline(mess[i], 80);
}

for (i = 0; i < 10; i++)
    cout << mess[i];

system("PAUSE");
return EXIT_SUCCESS;
}
4

3 回答 3

3

您想要的可能是以这种方式声明您的数组:

char mess[10][80];

当您从 getline 读取多达 80 个字符时。

您当前的实现构建了一个 10 的数组,char*这些数组从未初始化为指向已分配的缓冲区。

一种更安全的方法是使用std::string缓冲区大小来为您处理。一个简单的改变:

#include <iostream>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
    std::string mess[10];
    int i = 0;

    for (; i < 10; i++)
    {                 
        cout << "Enter a string: ";   
        cin >> mess[i];
    }

    for (i = 0; i < 10; i++)
        cout << mess[i] << endl; // you probably want to add endl here

    system("PAUSE");
    return EXIT_SUCCESS;
}

应该给你你想要的。

编辑

如果您绝对需要char *(这不是一个好主意),这就是您要寻找的:

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    char* mess[10];
    int i = 0;

    for (; i < 10; i++)
    {                 
        cout << "Enter a string: ";   
        mess[i] = new char[80]; // allocate the memory
        cin.getline(mess[i], 80);
    }

    for (i = 0; i < 10; i++)
    {
        cout << mess[i] << endl;
        delete[] mess[i]; // deallocate the memory
    }

    // After deleting the memory, you should NOT access the element as they won't be pointing to valid memory

    system("PAUSE");
    return EXIT_SUCCESS;
}
于 2013-01-13T19:40:43.213 回答
2

您必须首先初始化您在此处声明的指针,char *mess[10];以便为它们分配内存。您可以通过使用new()表达式来分配请求的内存来做到这一点。

char *mess[10];
for (int k=0; k<10; k++)
{
    mess[k]=new char[80];
}

请记住,在使用new()函数分配内存后,您必须始终在处理完数据后释放所使用的内存。你可以——而且你总是应该——使用delete()表达式释放内存。

for (int j=0; j<10; j++)
{
   delete[] mess[j];
}

有关动态分配/解除分配内存的更多信息,您可以参考此处

于 2013-01-13T19:43:11.360 回答
2

您分配了 10 个指针,但永远不要将它们初始化为指向 getline 可以读取输入的空间。

于 2013-01-13T19:38:25.513 回答