이것은 stackoverflow에 대한 첫 번째 게시물이며 규칙을 위반하거나 다시 게시하지 않기를 바랍니다. 나는 내 경고에 대한 해답을 찾았다. 유사한 인스턴스를 찾을 수는 있지만 작동하지 않습니다. 임씨는 도움을 받기를 희망합니다.C 세그먼트 화 오류, 여러 경고
hashfunction (myname)을 사용하여 해시 충돌을 찾아야합니다. 그래서 몇 가지 조사를하고 가능한 모든 문자열을 지정된 길이로 테스트하고 문자열이 발견되면이를 인쇄하는 재귀 함수를 조합했습니다. 봐.
void findCollision(char prefix[], int max_length);
int main() {
printf("Finding collison\n");
char blank[0] = {'a'};
findCollision(blank,999);
printf("Press Enter to Continue");
while(getchar() != '\n');
return 0;
}
void findCollision(char prefix[], int max_length){
char c;
char temp[sizeof(prefix)+1];
for(c = 'a'; c <= 'z'; c++){
strcpy(temp, prefix);
strcat(temp, c);
if(hashFunction(temp) == -408228925 && temp != 'myname'){
printf("found it! --->");
printf("%s", temp);
}
}
for(c = 'a'; c <= 'z'; c++){
strcpy(temp, prefix);
strcat(temp, c);
if(sizeof(prefix) < max_length){
findCollision(temp, max_length);
}
}
}
해시 코드 (필요한 경우 제공 할 수 있음)로 컴파일하면 이러한 오류가 발생합니다.
----------Build Started--------
----------Building project:[ hash - Debug ]----------
/home/mustbelucky/hash/hash.c
22:2: warning: excess elements in array initializer [enabled by default]
22:2: warning: (near initialization for ‘blank’) [enabled by default]
34:3: warning: passing argument 2 of ‘strcat’ makes pointer from integer without a cast [enabled by default]
/usr/include/string.h
136:14: note: expected ‘const char * __restrict__’ but argument is of type ‘char’
/home/mustbelucky/hash/hash.c
35:50: warning: character constant too long for its type [enabled by default]
35:47: warning: comparison between pointer and integer [enabled by default]
42:3: warning: passing argument 2 of ‘strcat’ makes pointer from integer without a cast [enabled by default]
/usr/include/string.h
136:14: note: expected ‘const char * __restrict__’ but argument is of type ‘char’
----------Build Ended----------
나는 성공적으로 문제를 해결했지만 성공하지 못했다. 이견있는 사람? 이 프로젝트는 2 일 안에 끝날 예정이며 잠시 동안 실행해야한다는 생각이 들었습니다.
코드 C 또는 C++이 있습니까? C처럼 보이므로 C++ 태그를 삭제해야합니다. 또한 모든 컴파일 경고문처럼 보입니다. 세분화 오류는 어디에 있습니까? – crashmstr
우선, 경고를 수정하십시오! 그들은 이유가 있습니다. 두 번째로 디버거에서 프로그램을 실행해야합니다. 충돌이 발생한 위치를 파악하는 데 도움이 될뿐만 아니라 충돌 사고의 원인을 파악하는 데 도움이되는 변수를 검토 할 수 있습니다. –
우선, C 언어를 배우십시오 ... 예를 들어, 'myname'은 C에서 문자열이 아니므로 "myname"을 대신 사용하십시오. 당신이 배울 필요가있는 너무 많은 세부 사항이 있습니다. 다른 사람들에게 "왜 내 코드 C가 아닌지"물어 본다는 것을 배울 수 없습니다. 이것은 본질적으로 여기서하는 일이기 때문에, 먼저 튜토리얼을 잡으십시오! – hyde