这是我关于stackoverflow的第一篇文章,我希望我没有违反任何规则或重新发布。我已经找到了警告的答案。虽然我可以找到某种类似的实例,但我无法得到有效的解决方案。我希望得到一些帮助。
我需要找到与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天内完成,我觉得它必须运行一段时间。
答案 0 :(得分:2)
char blank[0] = {'a'};
声明一个零长度的字符数组,但是用一个长度为1的aray填充它
strcat(temp, c);
尝试使用cat temp,这是一个char []到c,它是一个char。两个参数都应该是char *或char []
我认为除了您提供的代码段之外还报告了其他错误。
编辑:
temp != 'myname'
似乎试图测试temp
是否匹配'myname'
,但'myname'
是一个字符文字(如果这甚至编译它可能是'm',而temp是一个字符[],您想使用strcmp(temp, "myname") != 0
答案 1 :(得分:0)
警告在这里实际上是不言自明的。
22:2: warning: excess elements in array initializer [enabled by default]
这意味着你在数组中放入的元素多于为空间设置的元素。
34:3: warning: passing argument 2 of ‘strcat’ makes pointer from integer without a cast [enabled by default]
这意味着第二个参数应该是一个指针,但你给它一个char / int。
其他警告似乎来自其他代码。
至少有一个原因导致您的段错误是因为sizeof
无法在此处执行您想要的操作。