首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C文件I/O中的段错误

C文件I/O中的段错误
EN

Stack Overflow用户
提问于 2012-10-03 04:15:53
回答 4查看 111关注 0票数 1

我试图从一个文件中读入一串文本,但是每次我尝试时都会得到一个分段错误。这是我在程序中做的唯一一件事,所以我不太确定为什么会发生这种情况。

代码语言:javascript
复制
#include <stdio.h>

int main(){
  FILE* file;
  char* string;
  file = fopen("practice.txt", "r");
  fgets(string, 100, file);
  printf("%s", string);
  return 0;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-03 04:17:07

你还没有为你的字符串分配内存。可以使用malloc为字符串分配内存,也可以使用数组char string[100];

票数 6
EN

Stack Overflow用户

发布于 2012-10-03 04:20:06

确保分配内存来存储您将要读取的内容:

代码语言:javascript
复制
char string[101];
票数 3
EN

Stack Overflow用户

发布于 2012-10-03 04:26:42

这是因为string未初始化。string是一个char *,最初将垃圾值作为地址保存,fgets函数取消了对该地址的引用,从而导致未定义的行为。

我也不知道

代码语言:javascript
复制
char string[BUFFER_LEN];

并适当地定义BUFFER_LEN

或者做

代码语言:javascript
复制
char *string;
string = malloc (sizeof (char) * buf_siz);

其中buf_siz保存缓冲区的长度。当您动态分配字符串时,请记住在使用完使用malloc分配的内存块后使用free (string),这是一种很好的做法,可以防止大型程序中的内存泄漏。

始终通过检查fopen的返回值来检查文件是否打开成功。如果返回NULL,则打开操作失败。否则,它将返回FILE指针。

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

https://stackoverflow.com/questions/12697594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档