Ваш for
цикл:
for(int i=0;i<6*p;i++)
Лакомства размер массива, как 6*p
, где в примере p==9
. Таким образом, ваша петля рассматривает размер массива как 54.
Но массив a
имеет только 18 элементов, поэтому ваша инициализация переполняет этот массив.
Array b
имеет только 36 элементов, поэтому ваша инициализация переполняет этот массив.
Переполненная массив запишет в память, что вы, вероятно, не намерены писать, что может привести к разного рода ошибок ...
Вы бы лучше использовать такую функцию. Также вам нужно NULL-terminate ваши строки?
void initialize(char a[], size_t aSize, char b[], size_t bSize)
{
int i = 0;
for(; i < aSize-1; i++)
a[i]='-';
for(i = 0; i < bSize-1; i++)
b[i]='-';
// I think you need to NULL terminate....
a[aSize-1] = '\0';
b[bSize-1] = '\0';
}
int main()
{
int p=9;
char a[2*p],b[4*p];
initialize(a, sizeof(a), b, sizeof(b));
std::cout << a << std::endl << b << std::endl;
return 0;
}
Или еще более обобщенно в вас main()
функции, если вы когда-либо использовать массивы, которые не типа char
...
initialize(a, sizeof(a)/sizeof(a[0]), b, sizeof(b)/sizeof(b[0]));
Или даже, чтобы инициализировать массивы просто использовать memset(), а затем вам не понадобится функция initialize()
:)
Например
#include <string.h>
int main()
{
int p=9;
char a[2*p],b[4*p];
memset(a, '-', sizeof(a)-1);
a[sizeof(a)-1] == '\0';
memset(b, '-', sizeof(b)-1);
b[sizeof(b)-1] == '\0';
std::cout << a << std::endl << b << std::endl;
return 0;
}
Другой вещь, которую я только что хотя был «вы NULL оконечного ваших строк? Я изменил примеры выше для удовлетворения, что, в противном случае при печати строки функция печати не будет знать, где остановиться!
Еще один вариант может также быть std::fill() или *std::fill_n()*:
#include <iostream>
#include <algorithm> // std::fill
int main(int argc, char* argv[])
{
int p=9;
char a[2*p],b[4*p];
std::fill_n(a, sizeof(a)-1, '-');
a[sizeof(a)-1] = '\0';
std::fill_n(b, sizeof(b)-1, '-');
b[sizeof(b)-1] = '\0';
std::cout << a << std::endl << b << std::endl;
return 0;
}
Точно. Я хотел инициализировать с 18, b с 36 «тире». Но тогда b имел значения мусора после 36-го тире, которое выглядело как – Nikhil
Я не вижу их в своем браузере: | – Discipol