int main()
{
char *a1[10] = {"123","121"};
int i =0;
char *a=NULL;
for(i=0;i<2;i++)
{
a=strcat(a1[i],"0000");
printf("values %s",a);
}
}
Выход этого кода выходит, чтобы быть этим $ ./a.exe значения от 1230000 значений 0000000Значение Не печатается прямо на второй элемент массива
, но это должно быть $ ./a. ехе значения 1230000 значения 1210000
Пожалуйста, скажите мне, где я неправильно
Значения «123» и «121» расположены в памяти вместе ('1', '2', '3', '\ 0', '1', '2', '1', ' \ 0'). На первой итерации вы написали «0000» от первого «\ 0», в результате получились «1», «2», «3», «0», «0», «0», «0», 0 '. На второй итерации вы написали «0000» из позиции, где была вторая «\ 0», в результате «1», «2», «3», «0», «0», «0», , '0', '0', '0', '0', '0', '\ 0' Поэтому вы записали за пределами исходных позиций памяти, выделенных этим строкам. Вы запрограммировали классическое переполнение буфера. можно использовать в качестве примера, чтобы научить, как не программа – Jdamian
@Jdamian, нет переполнения буфера, это ошибка сегментации. –
@djrocktarun, сообщает ли ваша программа ошибку ошибки сегментации? – Jdamian