【求助】请帮我看看这样的写法是否有什么隐患
#include <stdio.h>
#include <conio.h>
#include <string.h>
typedef void* PVOID;
typedef unsigned char BYTE;
typedef unsigned char BOOL;
char FilePath[3][20] = {"", "backup\\", "default\\"};
BOOL ReadFromFile(const char* FileName, int n, const char* Format, PVOID s[10])
{
FILE* fp;
int i;
fp = fopen(FileName, "r");
if (NULL == fp)
return 0;
i = fscanf(fp, Format, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9]);
fclose(fp);
if(i == n)
return 1;
else
return 0;
}
void main()
{
int i;
int a, c;
char s[100];
PVOID pvS[3] = {&a, s, &c};
for(i = 0; i < 3; i++)
{
if (ReadFromFile(strcat(FilePath[i], "set.dat"), 3, "%d%s%d", pvS))
{
if (a > 0 && a < 10
&& strlen(s) > 0 && strlen(s) < 10
&& c > 0 && c < 10)
break;
}
}
if (i > 2)
{
a = c = 100;
}
printf("a = %d, s = %s, c = %d", a, s, c);
getch();
}
#include <conio.h>
#include <string.h>
typedef void* PVOID;
typedef unsigned char BYTE;
typedef unsigned char BOOL;
char FilePath[3][20] = {"", "backup\\", "default\\"};
BOOL ReadFromFile(const char* FileName, int n, const char* Format, PVOID s[10])
{
FILE* fp;
int i;
fp = fopen(FileName, "r");
if (NULL == fp)
return 0;
i = fscanf(fp, Format, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9]);
fclose(fp);
if(i == n)
return 1;
else
return 0;
}
void main()
{
int i;
int a, c;
char s[100];
PVOID pvS[3] = {&a, s, &c};
for(i = 0; i < 3; i++)
{
if (ReadFromFile(strcat(FilePath[i], "set.dat"), 3, "%d%s%d", pvS))
{
if (a > 0 && a < 10
&& strlen(s) > 0 && strlen(s) < 10
&& c > 0 && c < 10)
break;
}
}
if (i > 2)
{
a = c = 100;
}
printf("a = %d, s = %s, c = %d", a, s, c);
getch();
}
主要是
i = fscanf(fp, Format, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9]);
这一句,会有什么错误吗?
程序的目的是这样的
我的程序设置以文本形式保存在多个文件中,程序启动时需要从这些文件中读取设置,因为文件很多,每个文件中的设置个数,数据类型都不确定,所以想写一个通用的函数进行处理,就是上面的ReadFromFile函数,就是不知道这么写有没有什么未知的隐患
另外为了防止文件被意外的破坏,每个设置文件保存了三份,一份在根目录,一份在backup文件夹,一份在default文件夹,
主函数中的循环,就是读取这三个文件,并判断读取的数字是否有效,如果读取到有效数字,结束循环,如果三个文件都读取失败,则使用默认值
PS1:附件中是设置文件,程序文件,可执行文件的压缩包
PS2:怎么发悬赏帖来着?
PS2:如果有CSDN的ID,可以到这个帖子:http://topic.,50分
test.rar
(12.18 KB)