Я пробовал использовать malloc и new, но в любом случае я получаю размер массива до 24. Что происходит?Как правильно назначить память динамическому массиву символов
//I want to copy the last nine characters to a new string
//the function is basically for copying last x number of characters to a new string.
int main()
{
char str[] = "1234567890";
int offset=1;
int j=offset;
int len=strlen(str);
cout<<len-offset<<endl;
char str[] = "1234567890";
char* s=new char[9];
for(int i=0;j<len;i++){
s[i]=str[j];
j++;
}
cout<<strlen(s);
return 0;
}
Теперь я предполагаю, что выделенная память находится в байтах. но тогда я назначаю 9 байтов, почему он показывается как 24?
где он показывает 24? – Adam
Возможно, потому, что вы уходите от конца выделенного массива (размер 9) при переходе по более крупной строке (длина 10), * и * вы не завершаете свою строку нулевым символом независимо (требование для 'strlen()' функционировать должным образом). У вас есть неопределенное поведение в нескольких местах, и, честно говоря, вам (не) повезло, что он не разбился. Наконец, это даже не * компилируемый * код, так как 'str' объявляется * дважды * в той же области. – WhozCraig
Повторная декларация является ошибкой при отправке кода. –