【发布时间】:2014-10-26 23:43:52
【问题描述】:
下面是一个函数,它读取文件 user.dat(附在代码后面)并提取一个字符串和一个分别由“、”和“\n”分隔的 int 值。
void getUsers()
{
int i, t;
char *token1, *u;
FILE *fu = fopen("user.dat", "r");
const char s[2] = ", ";
if(fu != NULL)
{
char line1[20];
while(fgets(line1, sizeof line1, fu) != NULL)
{
token1 = strtok(line1, s);
for(i=0;i<2;i++)
{
if(i==0)
{
u = token1;
token1 = strtok(NULL,s);
} else {
t=atoi(token1);
}
}
addOuterNode(u,t);
}
printOuterNode();
fclose(fu);
} else {
perror("user.dat");
}
}
user.dat文件如下:
1000, 76
0095, 81
2910, 178
0001, 1
<EOF>
如果保持上述格式,程序可以正常工作。
但是我遇到问题(SIGSEGV 通常是因为 *u 和 t 值被发送到一个函数,该函数将它们插入到链表/嵌套链表的节点中的 void * 数据元素中)当有杂散空格或换行符时文件。例如:
<newline>
1000, 76
<space>
0095, 81
2910, 178
0001, 1
<space><newline>
<newline>
<EOF>
您能帮我预处理 user.dat 文本文件,以便我可以删除不需要的空白字符吗?
【问题讨论】:
-
检查:是令牌
""(或NULL)。 -
@BLUEPIXY 使用 if-else 语句或 istoken() 预定义函数?
-
以你最喜欢的方式
-
感谢您的帮助。 :)
标签: c formatting file-handling