【发布时间】:2018-05-12 19:54:07
【问题描述】:
我有一个文件,其中每个用户名和密码由不同数量的空格分隔。
bob passowrd1
saly password2
sam password2
void parse()
{
FILE*open;
open = fopen("file.txt");
char line[101];
char*name;
char*password;
while(fgets(100,line,open)!=NULL)
{
name = strtok(line,"*\\s");
password = strtok(NULL,"*\\s");
printf("username : %s",name);
printf("password : %s",password);
}
}
我正在尝试使用 strtok 拆分字符串,但它不接受正则表达式作为分隔符。我能想到的唯一另一种方法是通过对字符串进行循环并在空格之后创建2个新的单独字符串来强制执行。有什么建议吗?
【问题讨论】:
-
我非常担心您为什么要存储明文密码。
-
@tadman 这只是一个介绍类,我知道以明文形式存储密码是不安全的
-
scanf函数族忽略某些格式的所有前导空格,例如%s。if(fscanf(myfile, "%s%s", name, password) != 2) { /* bad input */ } -
我的第一条评论更好的解决方案是使用
fgets读取文件的每一行,然后应用sscanf。这使得转储无效条目变得容易。这里有很多 SO 问题和示例代码供您查找。您还没有发布任何尝试,所以问题不在主题范围内。 -
“我正在尝试使用 strtok 拆分字符串,但它不接受正则表达式作为分隔符。” --> 发布该代码。 VTC 没有提供minimal reproducible example。