【发布时间】:2020-01-16 21:50:10
【问题描述】:
因此,当我尝试写入文件时,访问冲突写入位置出现错误,并且 int 数组中的值不能很好地传输到据我所知,solve 函数。
void read(int n, int* v);
int prime(int);
void solve(int n, int x, int* v, FILE*);
void open_file_write(char*, FILE*);
void main()
{
int n, i, x, k, *v;
FILE* fp = NULL;
char s[30];
n = 7;
open_file_write(s, fp);
v = new int[n];
read(n, v);
x = v[n / 2];
solve(n, x, v, fp);
delete[](v);
if (fp)
fclose(fp);
else exit(1);
}
void solve(int n, int x, int* v, FILE* fp)
{
int i, k = 0;
float ma = 0;
for (i = 0; i < n; i++)
if (v[i] < x && prime(v[i]))
{
printf_s("%d ", v[i]);
k++;
ma += v[i];
fprintf_s(fp, "%d ", v[i]);
}
printf_s("\n%f ", ma / k);
}
void read(int n, int* v)
{
int i;
for (i = 0; i < n; i++)
scanf_s("%d", &v[i]);
}
int prime(int x)
{
int i;
if ((!(x % 2) && x != 2) || x == 1 || x == 0)
return 0;
else if (x == 2)
return 1;
for (i = 3; i * i < x; i++)
{
if (!(x % i))
return 0;
}
return 1;
}
void open_file_write(char* file_name, FILE* fp)
{
errno_t err;
printf_s("Enter the name of your destination file: ");
scanf_s("%s", file_name, 100);
if ((err = fopen_s(&fp, file_name, "w") != 0)) //opening destination file
{
puts("Error opening destination file");
_getch();
exit(1);
}
}
【问题讨论】:
-
open_file_write分配给局部变量。fpinmain仍然是NULL。 -
您告诉
scanf_sfile_name缓冲区有100 个字符大,但实际上它只有30 个字符大。scanf_s用零填充缓冲区,因此您的程序通过缓冲区溢出表现出未定义的行为。 -
@IgorTandetnik 所以我应该使用 *&fp,对吧?
-
@IgorTandetnik 来自 scanf_s 的缓冲区是问题所在。谢谢!