如何正确初始化指向字符数组的指针

How to proper inizialize a pointer to char array?

本文关键字:数组 指针 字符 何正确 初始化      更新时间:2023-10-16

我需要一些关于这个排序功能的帮助。此函数的目的是创建一个指向 char 的指针数组,让用户用一些单词填充它,并按字母顺序重新排序。这是代码的一部分:

void Sort(bool flag)
{
if(flag == false)
{
    //ordina stringhe
    int NumString = 0;
    cout<<"Number of strings: ";
    cin>>NumString; //!!
    char *Vector[NumString];
    for(int i=0;i<NumString;i++)
    {
        cout<<"Insert the "<<i<<" element: ";
        cin>>Vector[i];
        int Val = 0;
        char* swap;
        for(int i=0;i<NumString;i++)
        {
            for(int j=0;j<NumString;j++)
            {
                Val = strcmp(Vector[i],Vector[j]);
                if(Val > 0)
                {
                   swap = Vector[i];
                   Vector[i]=Vector[j];
                   Vector[j]=swap;
                }
            }
        }
        for(int i=0;i<NumString;i++)
        {
            cout<<Vector[i];
            cout<<endl;
        }
    }
}

当我尝试运行它时,我收到此错误,但我不明白为什么。这是程序的输出:

字符串数:3插入 0 元素:abc从主服务器读取失败 :输入/输出错误运行失败(退出值 1,总时间:7 秒(

char *Vector[NumString]被定义为字符指针数组。更多关于这个:https://www.codeproject.com/Articles/7042/How-to-interpret-complex-C-C-declarations

由于没有初始化任何char*元素,因此您的程序在尝试cin时进行非法内存访问并关闭/崩溃。

为避免这种情况,您可以改用std::string来为您分配内存。

编辑:如果必须使用 char 数组,则可以执行以下操作:您可以预先分配char数组长度,如下所示:char Vector[numString][noteLength] .然后使用 std::cin >> std::setw(noteLength) >> Vector[i] .

您还可以使用之前对char *Vector[NumString]的定义动态分配指针并调用Vector[i] = new char[noteLength]。完成后不要忘记打电话给delete Vector[i]

您还必须#include <iomanip>才能使用std::setw