c - 在 C 中使用 fscanf 时打印输出出错
问题描述
这是我一直在研究 C 的代码。
char Host_ip[256];
char *Database_name;
char *Username;
int listen_port;
FILE *myfile = fopen("Coin_Converter.config", "r");
fscanf(myfile, "Host=%s Database=%s Username=%s listenport=%d", Host_ip, Database_name,
Username, &listen_port);
fclose(myfile);
printf("Host = %s", Host_ip);
printf("Username= %s", Username);
printf("Database= %s", Database_name);
printf("listenport = %d", listen_port);
我的配置文件如下所示:
Host = 127.0.0.1
Database = base20
Username = John
listenport = 8080
我编译代码没有任何问题,但我无法打印任何东西。事实上,当我只打印 Host_ip 时它正在工作,但否则我什么也得不到。我尝试了几件事,但我无法弄清楚我做错了什么。
解决方案
您的代码中的两个主要错误是
使用未分配的指针而不是缓冲区
不从输入流中过滤空格。
通过一些更改(注释),代码变为
#include <stdio.h>
int main()
{
char Host_ip[256];
char Database_name[256]; // array instead of pointer
char Username[256]; // array instead of pointer
int listen_port;
FILE *myfile = fopen("Coin_Converter.txt", "r");
if(myfile == NULL)
return 1;
fscanf(myfile, "Host = %255s Database = %255s Username = %255s listenport = %d",
Host_ip, Database_name, Username, &listen_port); // added spaces
fclose(myfile);
printf("Host = %s\n", Host_ip); // added newlines
printf("Username= %s\n", Username);
printf("Database= %s\n", Database_name);
printf("listenport = %d\n", listen_port);
}
和输出
Host = 127.0.0.1
Username= John
Database= base20
listenport = 8080
fscanf
格式字符串中添加的空格用于从输入流中删除任何空格(或无空格)。
推荐阅读
- python - python pandas按列表中存在的部分行过滤
- highcharts - Highcharts 和 NPM/节点
- node.js - 是否可以离线安装全局节点包?
- r - 如何循环本地函数?
- android - 如何在燃料调用之外获得燃料结果
- javascript - 如何在使用 Redux 的组件内重定向回车键?
- python - 更新模型数据以匹配列表
- javascript - 附加到循环内的按钮时,如何在 JavaScript 中解析 XML 并在 nodeValue 中保留空格?
- ios - 使用 GEOSwift 时,如何创建宽度以米为单位的缓冲 LineString?
- c# - 登录后如何进行网页抓取