구조체 anangramInfo의 포인터를 전달하는 함수 호출 userInteractive (* anangramInfo)가 있으며이 구조체에는 실제 anagrams에 대한 포인터 "anagramPointer"가 들어 있습니다. 그래서, 나는 사용자로부터 표준을 얻는다. 포인터를 찾으려면 bsearch의 키로 사용하십시오. anagram은 동일한 anangram.sorted를가집니다. 키가 anagram.sorted와 일치하지 않을 때까지 포인터를 왼쪽으로 이동 한 다음 anagram.sorted가 일치하지 않을 때까지 anagram.word를 오른쪽으로 다시 이동하십시오. 그러나 그것은 나에게 분할 문제Csearch 세그먼트 화 오류가 발생했습니다
의 원인#include <string.h>
#include <errno.h>
#include <ctype.h>
#include "anagrams.h"
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#define SIZE 80
//struct
struct anagram {
char word[SIZE];
char sorted[SIZE];
};
struct anagramInfo {
struct anagram *anagramPtr;
int numOfAnagrams;
};
/* qsort struct comparision function (product C-string field) */
int sortedMemberCompare(const void *ptr1, const void *ptr2)
{
struct anagram *ia = (struct anagram *)ptr1;
struct anagram *ib = (struct anagram *)ptr2;
return strcmp(ia->sorted, ib->sorted);
/* strcmp functions works exactly as expected from
comparison function */
}
void userInteractive(struct anagramInfo *anagramInfoPtr){
struct anagram a;
char data[SIZE];
char *pos;
printf("Enter a word to search for anagrams [^D to exit]:\n");
fgets(data, SIZE, stdin);
//get ripe of the '\n'
pos=strchr(data, '\n');
*pos = '\0';
strncpy(a.word,data,sizeof(data));
//lowercase word
int i;
for(i=0;data[i] != '\0';i++)
{
data[i]=(char)tolower(data[i]);
}
/* sort array using qsort functions */
qsort(data,strlen(data), 1, charCompare);
strncpy(a.sorted,data,sizeof(data));
//struct pointer to the elements
struct anagram *ptr= (struct anagram *)bsearch(a.sorted,anagramInfoPtr-> anagramPtr ->sorted,anagramInfoPtr-> numOfAnagrams,sizeof(struct anagram),sortedMemberCompare);
printf(ptr->word);
while(strncmp(ptr ->sorted,a.sorted,sizeof(a.sorted))==0) {
ptr--;
}
while(strncmp(ptr ->sorted,a.sorted,sizeof(a.sorted))==0) {
printf(ptr ->word);
printf(" ");
ptr++;
}
}
아마 문자열의 일부는 80 개 문자 길이 될 일이? - >> strncpy()의 매뉴얼 페이지를 읽어보십시오 – wildplasser
anagramInfo 구조체는 어떻게 초기화합니까? –
주 코드에서 초기화합니다. – keivn