我有多行这个文件。每行都遵循
的格式`userID:$An Integer$$String:`
例如:
pyc1:$1$$Tnq7a6/C1wwyKyt0V/.BP/:
pyc2:$6$$Tnq7a6/C1wwyKyt0V/.BP/:
我应该如何使用fscanf()
检索userID
,整数以及$$
和:?之间的字符串?
这就是我现在所拥有的,但它不起作用。
int main(){
FILE * file = fopen("shadow.txt", "r");
char line[256] = {0};
char userID[30] = {0};
int hashType;
char hash[256] = {0};
int result = fscanf(file, "%s :$ %d $$ %s :", userID, &hashType, hash);
printf("%s\n", userID );
printf("%d\n", hashType );
printf("%s\n", hash );
}
我不太了解我应该为fscanf()
指定的格式来实现这一目标。请帮忙。
答案 0 :(得分:3)
尝试使用正则表达式,例如:
fscanf (file, "%[^:]:$%d$$%[^:]:", userID, &hashType, hash);
我创建了一个regex101链接,用于解释上面使用的正则表达式。
PS:不要忘记检查fscanf()
的返回值,以确保正确读取所有内容。您想要解析三个元素,因此返回值应为3。
答案 1 :(得分:0)
试试这个:
while(ret = fscanf(file," %[^:] : $ %d $$ %[^:] :",userID,&hashtype,hash))
{
if(ret == EOF)
{
break;
}
printf("value of ret: %d\n",ret);
printf("%s , %d , %s",userid,id,str);
// . . .
}
这里,int ret是: