2015-06-23 3 views
1

Я пытаюсь сформировать подстроки заданной строки, так что строки и подстрока динамически распределены, подстрока - это 2D-массив, так как он будет содержать несколько подстрок.Чтение нарушения доступа Местоположение (Visual Studio C++)

Я не могу понять, где я иду не так.

Ошибка:

Unhandled exception at 0x54E0F791 (msvcr110d.dll) in <filename>.exe: 0xC0000005: Access violation reading location 0x00000065 

Вот мой код:

char **sub = new char* [10]; 
sub[0] = new char [10]; 
strcpy(sub[0],""); 

char *S = new char[10]; 
strcpy(S,""); 
cin.getline(S,10); 

for(int j = 2; j<10; j++) 
    strcat(sub[0],(char*)S[j-1]); 

cout<<sub[0]; 
+3

Вы литья 'char' к' '* полукокса и передавая ее' strcat' - как можно ожидать, что сделать что-нибудь полезное ? –

+1

'strcat (sub [0], & S [j-1]);' –

+1

'std :: vector ' проблема решена. – PaulMcKenzie

ответ

1

Как видно из кода, что ваше намерение состоит в том, чтобы сцепить sub[0] к S. Простое решение будет удалено для цикла и просто напишет.

strcat(sub[0],S); 

Проблема в вашем коде strcat(sub[0],(char*)S[j-1]);, вы пытаетесь бросить символ как указатель символов.

Теперь другая вещь, которую я вижу в вашем коде, - вы не открыли доступ к S из 0-го индекса. Это может быть вашим требованием или около того. Даже если у вас есть решение, если вы хотите объединиться с index 1.

strcat(sub[0],&S[1]); 

PS: подпись strcat является

char * strcat (char * destination, const char * source); 
+0

На самом деле я хотел объединить только подстроку S в sub [0], как показано выше. Спасибо В первую очередь код работает сейчас. Я понимаю, как прохождение адреса S [..] в strcat будет работать, но я до сих пор не понимаю, в чем проблема явного преобразования char в char *, согласно мне, который должен выполнять ту же работу. –

+0

На самом деле это не сработало, если я делаю & S [j-1], тогда вся строка после j-1 становится конкатенированной, я хочу, чтобы только определенный диапазон символов в массиве получался конкатенированным, и поэтому я использую цикл для задать диапазон и индивидуально конкатенировать каждый символ в массиве –

+0

показать мне пример, чтобы я мог лучше понять, чего вы пытаетесь достичь. – HadeS

Смежные вопросы