如何正确初始化指向字符数组的指针
How to proper inizialize a pointer to char array?
我需要一些关于这个排序功能的帮助。此函数的目的是创建一个指向 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
相关文章:
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”