所以我遇到了一些与我之前在 C 编程中的任务相关的问题。这次是关于如何使用or将名称与/etc/passwd
文件分开。交易是我想将用户名分成两部分,第一部分是名字和中间名(假设他们有一个),第二部分是姓氏。但我找不到正确分隔名称的方法。我让它在第一部分使用他们的名字,但是中间名附加到姓氏上。strtok_r
strtok
这些/etc/passwd
行看起来像这样:
s214907:x:1240:1251:Jonas Villa,,,:/home/s214907:/bin/bash
s212167:x:1297:1306:Konstantina Pavlova Rusenkova,,,:/home/s212167:/bin/bash
我得到的示例:
[Konstantina] [Pavlova Ruskenova]
我希望它如何打印的示例:
[Konstantina Pavlova] [Ruskenova]
到目前为止,这是我的代码:
char line[256], words[20];
char *mname, *tmp, *uid, *sp, *lname, *uname, *name, *fname, *tmps;
int bindex=0, index, cnt =0, count;
char *rest = NULL;
FILE*fp = fopen("/etc/passwd","r");
size_t len = 0;
char *next = NULL;
while(fgets(line,256,fp)!=NULL)
{
sp = strtok(line, ":");
tmp = strtok(NULL, ":");
uid = strtok(NULL, ":");
tmp = strtok(NULL, ":");
name = strtok(NULL, ":,");
if(atoi(uid) > 999)
{
for(tmps = strtok_r(name, " ", &rest);
tmps != NULL;
tmps = strtok_r(NULL, ",", &rest)) {
tmps = strtok(tmps, ",");
printf("[%s]\n", tmps);
}
}
cnt++;
}
fclose(fp);