首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么fscanf()不在这个指针中存储这个字符串?

为什么fscanf()不在这个指针中存储这个字符串?
EN

Stack Overflow用户
提问于 2014-02-04 07:10:30
回答 3查看 312关注 0票数 0

好的,所以我在读取字符串名并将它们存储在类型类型的struct数组中时遇到了困难。年龄场是整数,gpa场是双倍的,而那些工作得很好。然后,当我添加要读取的名称时,我开始遇到问题。如何成功地读取名称并将其存储在student.name字段中?下面的代码崩溃了,我不知道为什么。我是新来的C,所以请告诉我,如果有更好的方法来做这件事。提前谢谢你。哦,名字是连续的字母,字符之间没有空格。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typedef struct student{
     char *name; int age; double gpa;
}student; 

void read(char *filename) {
File *file = fopen(filename,"r");  
if(!file) return; 
student *students = malloc(sizeof(student)*100); 
int num_students = 10; //for example
int i; 
for (i=0;i<num_students;i++) {

    char *n = malloc(MAXLENGTH); 
    fscanf(file,"%s %i %lf", n,&students[i].age,&students[i].gpa); //<---runtime error occurs here
    strcpy(students[i].name,n);
    free(n);
} 

/*code here to do stuff with the array*/
free(students); 
fclosef(file); 
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-04 07:23:25

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int n =0;
for (i=0;i<num_students;i++) {

char *n = malloc(MAXLENGTH); 
n = fscanf(file,"%s %i %lf", n,&students[i].age,&students[i].gpa);
if(n!= 3 || n = EOF){
    printf("invald input..");
}
students[i].name = malloc(strlen(n) +1);
if(student[i].name != NULL){
    strcpy(students[i].name,n);
}
free(n);
}    

曼福斯

在成功完成之后,这些函数返回成功匹配和分配的输入项的数量;如果早期匹配失败,这个数字可以是0。如果输入在第一次匹配失败或转换之前结束,则返回EOF。如果发生读取错误,则设置流的错误指示符,EOF为

返回,并将errno设置为指示错误。

票数 1
EN

Stack Overflow用户

发布于 2014-02-04 07:13:46

尝试将这一行strcpy(students[i].name,n);替换为students[i].name = strdup(n);

我使用strdup来分配足够的内存来保存字符串,如果您尝试=,它将工作,但是会使name成为只读的!strcpy()也会工作。

在这里,您可以参考使用strdup:strdup() - what does it do in C?

另外,我不认为您为students[i].name分配内存

票数 1
EN

Stack Overflow用户

发布于 2014-02-04 07:26:53

您的问题是,要存储到n数组中的文件中的“字符串”没有空终止符。因此,%s不能很好地工作在fscanf()中。尝试另一个选项,将其视为cvs文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21556119

复制
相关文章
一个函数返回多个值
第一种方法:函数返回的是一个指针地址(数组地址),这个内存地址有多个变量寄存在里面。这个方法我不太会用,传地址传值我常常搞的淅沥糊涂。
Java架构师必看
2021/03/22
1.4K0
Python 字符串中返回bool类型的函数集合
字符串中返回bool类型的函数集合 isspace 功能: 判断字符串是否是由一个空格组成的字符串 用法: booltype = string.isspace() -> 无参数可传 ,返回一个布尔类型 注意: 由空格组成的字符串,不是空字符串 : “’!=‘’’ istitile 功能: 判断字符串是否是一个标题类型 用法 booltype = String.istitle() -> 无参数可传, 返回一个布尔类型 注意: 该函数只能用于英文 isupper与islower 功能: isupper判断字
Zkeq
2022/05/18
2.4K0
函数返回指针
先写一个例子,运行一下看看 #include <stdio.h> int add(int a, int b) { printf("a = %d b = %d\n", &a, &b);
用户7272142
2023/10/11
1140
函数返回指针
返回函数
一个函数可以返回一个计算结果,也可以返回一个函数 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回 返回一个函数时,牢记该函数并未执行,返回函数中不要引用任何可能会变化的变量
py3study
2020/01/17
1.2K0
【Python】函数 ③ ( 函数返回值定义语法 | 函数返回多个返回值 | 代码示例 )
在 Python 函数中 , 通过 return 关键字 , 可以返回一个结果给调用者 , 这个返回结果就是 函数返回值 ;
韩曙亮
2023/10/11
7390
【Python】函数 ③ ( 函数返回值定义语法 | 函数返回多个返回值 | 代码示例 )
【玩转腾讯云】认识云函数,从 helloworld 开始
云函数(Serverless Cloud Function,SCF)是腾讯云的 Serverless Faas 产品,它可以让开发者在无需购买和管理服务器的情况下运行代码。使用云函数时,只需使用平台支持的语言(Python、Node.js、PHP、Golang、Java 及 Custom Runtime)编写代码。云函数具有自动扩容缩容、按需计费、运维成本低的优势,使开发者可以专注于核心业务逻辑。此外。对于新用户,还有一定的免费额度,让开发者可以免费试用。
donghui
2021/03/31
1.7K0
【玩转腾讯云】认识云函数,从 helloworld 开始
函数的返回值指向一个指针
函数的返回值类型必须与函数体内的返回表达式的类型相匹配。如果类型不匹配,编译器会报错。此外,C 语言中的函数只能返回一个值,如果需要返回多个值,可以使用结构体或指针等方式来实现。
云深无际
2023/05/24
6990
函数的返回值指向一个指针
字符串匹配算法从indexOf函数讲起
相信每个学习过Java的人都使用过indexOf函数,indexOf函数我们可以查找一个字符串(模式串)是否在另一个字符串(主串)出现过,返回结果表示出现位置的下标,如果返回-1,表示模式串在主串中不存在,那么,你可曾想过这些查找函数又是如何实现的呢?
黄林晴
2020/01/13
1.4K0
字符串匹配算法从indexOf函数讲起
【C 语言】字符串模型 ( 字符串翻转模型 | 抽象成业务函数 | 形参返回值 | 函数返回值 | 函数形参处理 | 形参指针判空 )
将上一篇博客 【C 语言】字符串模型 ( 字符串翻转模型 ) 的代码 , 主要业务逻辑 , 抽象成函数 ;
韩曙亮
2023/03/29
9350
【C 语言】字符串模型 ( 字符串翻转模型 | 抽象成业务函数 | 形参返回值 | 函数返回值 | 函数形参处理 | 形参指针判空 )
实现SQL Server中的切割字符串SplitString函数,返回Table
有时我们要用到批量操作时都会对字符串进行拆分,可是SQL Server中却没有自带Split函数,所以要自己来实现了。
写代码的猿
2019/04/11
3.2K0
实现SQL Server中的切割字符串SplitString函数,返回Table
腾讯云防火墙
腾讯安全云防火墙产品,是腾讯云安全团队结合云原生的优势,自主研发的 SaaS 化防火墙产品,无需客户关注硬件及软件镜像的安装部署,分钟级别一键交付,大大缩小了客户使用和日常运维的成本。另外,腾讯云防火墙产品还集成了腾讯云全网的威胁情报,实时监测云上主机的失陷情况,可对恶意主动外联活动智能拦截。同时集成了基于攻击者视角的漏扫能力,针对新发现的0-day 及高危漏洞,可通过 IPS 模块的虚拟补丁技术,小时级修复云环境中虚拟机的漏洞,无需客户重启系统,不影响业务正常使用。腾讯云防火墙对云上的流量安全做到可信、可控、可审计,是云上流量安全中心,策略管控中心。
Alexazeng
2021/02/07
4K0
腾讯云防火墙
[python]函数返回多个return
python支持函数直接返回多个变量,具体用法如下: >>> def test(): ... a=2 ... b=3 ... return a,b ... >>> print(test()) (2, 3) >>> a,b=test() >>> print(a) 2 >>> print(b) 3 >>> print(test()[0]) 2 >>> print(test()[1]) 3
py3study
2020/01/19
2.5K0
C++ - 编写一个从字符串转变成长整型的函数
分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net
用户7886150
2021/02/05
8120
stat()函数_stat函数返回值
在 linux 中,经常需要获取文件的属性,比如修改时间,文件大小等等。stat 函数将会帮助我们得到这些信息。
全栈程序员站长
2022/09/24
3.4K0
【说站】python函数返回多个返回值
python函数返回多个返回值 一般情况下,函数只有一个返回值,但Python也支持函数返回多个返回值。 1、为了返回多个返回值,只需在return关键字后跟多个值(依次用逗号分隔)。 def date():     import datetime     d = datetime.date.today()     return d.year, d.month, d.day 2、事实上,当返回值增加时,Python将返回值包装成元组,然后返回元组。 >>> date() (2019, 9, 4) 以上
很酷的站长
2022/11/24
2.8K0
【说站】python函数返回多个返回值
java:函数--返回多个值
1、【使用集合类】使用map返回值;这个方法问题是,你并不知道如何返回值的key是什么,只能通过doc或者通过源代码来查看。
用户7886150
2020/12/14
2.7K0
2021-12-13:字符串解码。给定一个经过编码的字符串,返回
2021-12-13:字符串解码。给定一个经过编码的字符串,返回它解码后的字符串。
福大大架构师每日一题
2021/12/13
3540
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串
注释:默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。
全栈程序员站长
2022/07/07
1.5K0
Python中如何构造返回函数以及怎么使用返回函数
Python返回函数即当一个函数的返回结果是另一个函数的时候,这样的函数就是返回函数。
python自学网
2021/12/05
2.8K0
Python中如何构造返回函数以及怎么使用返回函数
点击加载更多

相似问题

云函数onCall -如何返回对象

11

firebase云函数oncall返回null

22

云函数.onCall()无法返回数据

11

firebase onCall云函数不返回结果

11

如何处理防火墙云函数api oncall的错误?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文