gpt4 book ai didi

c - C 中的匹配哈希值

转载 作者:行者123 更新时间:2023-11-30 16:37:21 26 4
gpt4 key购买 nike

我对 C 相当陌生,目前正在练习编写一个程序,该程序允许用户搜索文本文件中写入的哈希值。我想出了以下程序:

HashMatch.c

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//Declaring Functions
int searchstringinfile(char *string, char *filename);
void UsageInfo(char *filename);

//Display usage info on arguments for program
void UsageInfo(char *filename) {
printf("Usage: %s <file> <string>\n", filename);

}

int searchstringinfile(char *filename, char *string) {
//Define File
FILE *userfile;

int linenumber = 1;
int search_result = 0;
char temp[10000];

//Error handling for invalid file
if((userfile = fopen(filename, "r")) == NULL) {
return(-1);
}


//Matching words line-by-line
while(fgets(temp, 10000, userfile) != NULL) {
if((strstr(temp, string)) != NULL) {
//Display line in which matched word is found
printf("A match found on line: %d\n", linenumber);
printf("\n%s\n", temp);
search_result++;
}
linenumber++;
}


// Display message if no matches are found
if(search_result == 0) {
printf("\nSorry, couldn't find a match.\n");
}

//Closes the file.
if(userfile) {
fclose(userfile);
}
return(0);
}


//main function.
int main(int argc, char *argv[]) {
int result, errcode;
//Display format for user to enter arguments and
//End program if user does not enter exactly 3 arguments
if(argc < 3 || argc > 3) {
UsageInfo(argv[0]);
exit(1);
}


system("cls");
//Pass command line arguments into searchstringinfile
result = searchstringinfile(argv[1], argv[2]);
//Display error message
if(result == -1) {
perror("Error");
printf("Error number = %d\n", errcode);
exit(1);
}
return(0);
}

我还提出了一个包含一个字符串和一个哈希值的文件:

哈希文本.txt

$1$$t8TX0OHN6Wsx6vlPZNKik1
Ice-Cream
I SCREAM FOR Ice-Cream !

如果我要搜索“冰淇淋”这个词:

./test hashtext Ice-Cream

我能够找到包含所述单词的行:

A match found on line: 2

Ice-Cream

A match found on line: 3

I SCREAM FOR Ice-Cream !

但是,如果我要搜索文本中的哈希值,我将无法做到这一点。谁能告诉我为什么我无法搜索哈希并指导我完成允许我这样做的步骤?

谢谢。

最佳答案

您的哈希字符串中包含“$”。 Bash 认为它是一个特殊字符。特殊字符需要转义,以消除这些字符的特殊含义。

根据具体情况,您可以执行以下任一操作来处理它们:

  1. 使用 \ 单独转义特殊字符。您的输入字符串将类似于 \$1\$\$t8TX0OHN6Wsx6vlPZNKik1
  2. 使用'转义整个字符串中的特殊字符。您的输入字符串将类似于 '$1$$t8TX0OHN6Wsx6vlPZNKik1'
  3. 通过重定向从 stdin 加载字符串。但是,您需要为此编辑程序。您不需要转义字符。

以下是 bash 中许多特殊字符的完整列表:https://docstore.mik.ua/orelly/unix/upt/ch08_19.htm

关于c - C 中的匹配哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47989147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com