Хит там!Ошибка сегментации при копировании строки до
Ниже представлена небольшая программа, которую я сделал сегодня. Он берет таблицу строк, меняет все строки без реверсирования таблицы, затем сортирует их, перевернутую строку, затем отменяет их назад и, наконец, печатает всю таблицу.
Я очень долго пытался выяснить, почему я не могу скопировать строку замедленного действия в таблицу, указанную в strcmp, но без успеха. Я был бы рад, если бы кто-то нашел способ исправить ошибку сегментации в этом случае, но я действительно хочу оставить метод, как он ниже.
Благодарим за помощь! :)
EDIT С помощью отладчика я решил, что появляется Сегментация Неисправность в зЬгсру, если это не было ясно ...
#include <stdio.h>
#include <string.h>
const int ROZMIAR=4;
char* nieposortowane[]={"basia", "zosia", "ala", "genowefa"};
int porownaj(char* a, char* b)
{
return strcmp(a,b);
}
void sortowanie(char** tablica, int N)
{
int zamienione, i;
char tmp;
do
{
zamienione=0;
for(i=0;i<N-1;i++)
if(porownaj(nieposortowane[i], nieposortowane[i+1])>0)
{
tmp=**(tablica+i);
**(tablica+i)=**(tablica+(i+1));
**(tablica+(i+1))=tmp;
zamienione=1;
}
}
while(zamienione);
}
void wypisz(char** tablica, int N)
{
int i=0;
for(i=0;i<N;i++)
printf("%s\n", *(tablica+i));
}
void odwr(char** tablica, int N)
{
int i, ln, c;
int start, koniec;
char temp;
for(i=0;i<N;i++)
{
ln = strlen(tablica[i]);
char slowo[ln];
strcpy(slowo,*(tablica+i));
start=0;
koniec=ln-1;
for(c=0;c<(ln/2);c++)
{
temp =slowo[start];
slowo[start]=slowo[koniec];
slowo[koniec]=temp;
start++;
koniec--;
}
strcpy(*(tablica+i), slowo);
}
}
int main()
{
printf("Przed sortowaniem: \n");
wypisz(nieposortowane, ROZMIAR);
odwr(nieposortowane, ROZMIAR);
sortowanie(nieposortowane, ROZMIAR);
odwr(nieposortowane, ROZMIAR);
printf("Po sortowaniu babelkowym: \n");
wypisz(nieposortowane, ROZMIAR);
return 0;
}
«basia» - строковый литерал. строковый литерал переписать запрет. – BLUEPIXY