у меня есть указатель на указатели на символ установлен как:Назначение указателей на указатели
char **A;
char **B;
творю строку сортировки с помощью Radix сортировки, и я должен уладить это несколько раз, но если сортировать его, это просто сортировка массива A
и сохраняет результат в массиве B
. То, что я хочу сделать, это назначить A
быть B
, который уже почти отсортированных A
, но когда я делаю:
A = B;
Я просто установить указатели, не так ли? Это означает, что A
указывает сейчас на B
. И, когда я позже переопределяю значения, у меня есть несколько результатов одной и той же строки. Например:
A = {"aa", "ba", "bc", "bd"};
После сортировки и с помощью A = B
, выглядит результат:
B = {"aa", "aa", "bc", "bd"};
Я также попытался с помощью memcpy()
- который должен копировать то, что B
указывает на на место, которое указал на A
, правильно ? Но результат тот же. Не знаю, как заставить это работать. Не был уверен, разместить здесь полный код, поэтому я загрузил его на pastebin.
Благодарим за любую помощь заранее.
Редактирование2: с небольшой помощью, сменил его, и он отлично работает с memcpy()
, но он по-прежнему не является «стабильным», а вместо B = {"bb", "bc"}
У меня есть противоположное: B = {"bc", "bb"}
. Я все еще сражаюсь с ним, но никаких результатов пока нет.
void CSort(int p){
int k = 123;
int C[k];
int i;
for(i = 0; i <= k; i++){
C[i] = 0;
}
for(i = 0; i < ILE; i++){
C[(int)As[i][p]]++;
}
for(i = 1; i <= k; i++){
C[i] = C[i] + C[i - 1];
}
for(i = 0; i < ILE; i++){ // ile means how many words there are
Bs[C[(int)As[i][p]] - 1] = As[i];
printf("As[%i][%i] == %c ", i, p, As[i][p]);
printf("C[%i] == %i ", (int)As[i][p], C[(int)As[i][p]]-1);
printf(" Bs[%i] == %s \n", C[(int)As[i][p]] - 1, Bs[C[(int)As[i][p]] - 1]);
//(As[i], Bs[C[(int)As[i][p]]], sizeof(As[i]));
C[(int)As[i][p]]--;
}
}
Это мой Counting дешево, и тут приходит мой десятичную:
void RSort(int d){
int i;
for(i = d; i >= 0; i--){
CSort(i);
memcpy(As, Bs, sizeof(*As) * ILE);
}
}
Я даже не получил идея - почему - потому что на бумаге, она работает просто отлично!
Чтобы исправить мою проблему, все, что я должен был сделать, должно было изменить порядок, в последнем цикле:
for(i = 0; i < ILE; i++)
изменение
for(i = ILE - 1; i >= 0; i--)
И все работает просто отлично!
Проблема в коде. Попытайтесь разбить его и скопируйте разделенную версию здесь. – perror
ваши poiters указатели неинициализированы в два раза, а код, который вы отправили здесь, присваивает указателям _constants_ указателям, они доступны только для чтения и не могут быть запутаны. Besisdes: 'sizeof (ptr_var)', вероятно, 4 (или 8, если 64 бит) –
'A = {" aa "," ba "," bc "," bd "};' недопустимый синтаксис – newacct