에 있습니다!문자열을 복사 할 때 세그먼트 오류가
아래는 제가 오늘 만든 작은 프로그램입니다. 문자열 테이블을 가져와 테이블을 뒤집지 않고 모든 문자열을 역순으로 변환 한 다음 역순으로 정렬 한 다음 다시 역순으로 정렬하고 마지막으로 전체 테이블을 인쇄합니다.
strcmp를 가리키는 테이블에서 '느린'문자열을 복사 할 수없는 이유를 알아 내려고 노력했지만 정말 성공하지 못했습니다. 이 경우 Segmentation Fault를 수정하는 방법을 찾을 수 있다면 행복 할 것이지만, 아래의 방법을 그대로두고 싶습니다.
도움 주셔서 감사합니다. :)
이 분명 아니었다면 내가 분할 오류가 strcpy를 나타나는지 결정 디버거를 사용하여편집 ... 계산할 때
#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