c - 从 .txt 读取的字符串在 C 中无明显原因被重新定义

标签 c

我被困在 c: 的大学项目中

char ID[10],tipo[10],origen[50],destino[50],hora_salida[5],hora_llegada[5];
int duracion;
float precio;
FILE *fp;
chdir("BASEDATOS");
fp=fopen(nombreArchivo,"rt");
fseek(fp,228*sizeof(char),SEEK_SET);
setlocale(LC_CTYPE,"spanish");
gotoxy(1,1);
fscanf(fp,"%s",ID);
fscanf(fp,"%s",tipo);
fscanf(fp,"%s",origen);
fscanf(fp,"%s",destino);
printf("%s\n",destino);
fscanf(fp,"%s",hora_salida);
printf("%s\n",destino);

(函数 Gotoxy() 按预期工作,不与变量或 txt 文件交互)
所以我在项目中遇到了这个特定函数的问题,我需要读取 .txt 文件的一些字符串,当我扫描“destino”变量时就会出现问题。由于某种原因,当我扫描下一个字符串(hora_salida)时,尽管我根本没有使用变量“destino”,但值会发生变化。

txt 文件的第一行格式如下:

https://imgur.com/a/aaHwo

请注意,我使用 fseek 跳过前三行,这些行没有用。

代码的结果如下:

Madrid-Chamartín\n
(blank space)

因此 destino 首先获得所需的值,但随后变为空白。

最佳答案

hora_salidahora_llegada 不够大。这些字段有 5 个字符,因此您需要 6 个字节来允许空终止符。

char hora_salida[6], hora_llegada[6];

因此,您会因缓冲区溢出而导致未定义的行为。

关于c - 从 .txt 读取的字符串在 C 中无明显原因被重新定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47164695/

相关文章:

c - 如何读取旋转编码器输入

c++ - C/C++ 项目可以使用 Xcode 编译,但不能使用 gcc/g++ 编译

c - 在C中将内存初始化为零是什么意思?

C 和 Linux : Waiting for when a file has been written to

c - 指针函数返回假值

c - 通过名称判断 #define 是否存在

c - 参数c[a][b]和c[][2]有什么区别

c++ - 复制跨步数据(进出 CUDA 设备)的有效方法?

c++ - C++ 中 ^ 运算符的作用是什么

C 程序 — 当 n 为奇数时,对给定 n 的数字进行编码?