我正在编写一个请求数组的函数,如果找到一个大写字母,它应该将整行交换为大写字母。否则,它只是打印功能。 将main函数运行到函数检查captial字母的部分是可以的,我收到标题中提到的错误。
主要功能:
#include <iostream>
#include "FuncA.h"
#include "printarr.h"
using namespace std;
void main()
{
char choice;
do
{
cout << "Welcome, choose a function to continue: " << endl << "\n A for Uppercasing arrays. \n B for Column sum. \n C for String copying. \n D for exit" << endl;
cin >> choice;
switch (choice)
case 'A':
funca();
}
while (choice != 'D');
}
有问题的功能:
#include <iostream>
#include "FuncA.h"
#include "printarr.h"
using namespace std;
void funca()
{
int rows = 0, cols = 0; //init
cout << "how many rows? ";
cin >> rows;
cout << "\n how many cols? ";
cin >> cols;
char arr[][COLS] = {0};
for (int i = 0; i < cols; i++) // input
{
for (int j = 0; j < rows; j++)
{
cin >> arr[i][j];
}
}
for (int i2 = 0; i2 < cols; i2++) // capcheck and printing if caps not detected
{
for (int j2 = 0; j2 < rows; j2++)
{
if (arr[i2][j2] >= 90 || arr[i2][j2] <= 65)
{
printarr(arr, rows, cols);
}
}
}
}
如何解决此问题?我尝试改变COLS的大小(大小在.h文件中定义)但是没有用。
答案 0 :(得分:4)
您对arr
的声明等于char arr[1][COLS]
。第一个“维度”的任何非零索引都将超出范围。
如果您想要一个在运行时设置大小的“数组”,请使用std::vector
:
std::vector<std::vector<char>> arr(cols, std::vector<char>(rows));