【发布时间】:2018-04-30 18:37:38
【问题描述】:
我在创建一个创建包含多行的 bin 文件的代码时遇到问题,每行包含每行 6 个值。例如: 我正在做一个小项目,其中每一行都是一个“密码”,所以我的系统将加载这个文件并从中读取所有密码,当它被更新等等。 我还没有实现读取文件的方法,因为我正在努力操作文件。 该项目将在 linux 上运行,具有 Raspberry pi 的 GPIO 功能 所以我使用 Visual Studio 来创建主要代码。
我当前的代码是:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char keys[4] = { '1', '2', '3', '4' }; // NOT USING
char temp_key[6];
int incl_key() {
int i;
FILE *fp;
char code = "0";
int control = 0;
int var_internal = 0;
fp = fopen("keys.bin", "wb");
if (fp == NULL) {
printf("\n Error opening file. \n");
}
printf("write your sequence <6 digits>:\n");
do{
scanf("%s", &temp_key);
fputs(temp_key, fp);
fputs("\n", fp);
control++;
} while (control < 5);
fclose(fp);
}
int keys_db() {
return 0;
}
int main() {
incl_key();
system("PAUSE");
}
提前致谢。
【问题讨论】:
-
不清楚您的问题是什么或您的具体问题是什么。如果你想将它组织为“行”,为什么它是一个二进制文件?
-
代码正在使用
char temp_key[6]; scanf("%s", &temp_key);写入数组边界外并输入"123456"。 -
您的
temp_key有六个元素,并且您向我们展示了包含六个字符的示例数据。这意味着当您调用fputs时temp_key已满,并且不包含终止空字符。所以fputs溢出数组,寻找那个空值,而你不知道写入文件的内容。定义temp_key并为终止 null 留出足够的空间,并确保您的scanf不会读取太多。 -
你一般是
fwrite和fread(或者没有文件流库,write和read)二进制文件。虽然您可以使用fputs将string(减去它的nul-terminating 字符)写入任何文件,但您写入的是ASCII 字符,而不是整数序列。 (例如1-byte每char,与一般4-bytes每int) -
@chux 那么你的意思是我需要在向量中为 '\0' 或 '\n' 符号放置一个额外的空间吗?我只是想知道是否可以制作每个密码,每行存储一个 6 个字符,但我的代码很奇怪,我迷路了。如果这在二进制文件上是不可能的,例如,我如何浏览文件以寻找密码?扫描6个数字并与用户向量进行比较,但是如何?