你的for
循环:
for(int i=0;i<6*p;i++)
将数组大小视为6*p
示例中的位置p==9
。因此,您的循环将数组大小视为 54。
但是数组a
只有 18 个元素,所以你的初始化溢出了这个数组。
数组b
只有 36 个元素,所以你的初始化也溢出了这个数组。
溢出数组将写入您可能不打算写入的内存,这可能会导致各种错误......
您最好使用类似的功能。您还需要NULL 终止您的字符串吗?
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;
}