C中文件处理操作中的分段错误?
我是UNIX中文件处理的新手,我不知道在哪里以及如何出现分段错误。是否有我没有分配的内存,或者实际打开和读取文件时有问题。注意:同一目录中有一个名为“hi.txt”的空文本文件 读.cC中文件处理操作中的分段错误?,c,file,unix,C,File,Unix,我是UNIX中文件处理的新手,我不知道在哪里以及如何出现分段错误。是否有我没有分配的内存,或者实际打开和读取文件时有问题。注意:同一目录中有一个名为“hi.txt”的空文本文件 读.c #include <stdio.h> #include <string.h> FILE *fp; FILE *wp; void open(char *name) { char *outname = strcat(name, ".rzip"); fp = fopen(na
#include <stdio.h>
#include <string.h>
FILE *fp;
FILE *wp;
void open(char *name)
{
char *outname = strcat(name, ".rzip");
fp = fopen(name, "r");
wp = fopen(outname, "w");
}
char read()
{
return getc(fp);
}
void write(char c)
{
putc(c, wp);
}
void close()
{
fclose(fp);
}
您的char*outname没有分配足够的内存来容纳连接的字符串 使用方法如下:
char*str2=“.rzip”;
char*outname=(char*)malloc(1+strlen(name)+strlen(str2));
strcpy(outname,name);
strcat(名字,str2);
fp=fopen(名称,“r”);
wp=fopen(简称“w”);
BLUEPIXY的评论很到位。您对字符串常量误用了strcat
要在Linux中快速调试分段故障,您应该使用操作系统提供的核心转储功能
很简单:
-g
选项编译
$gcc-o read main.c read.c-g
$ulimit-c unlimited
$。/阅读
分段故障(堆芯转储)
core
文件
$ls-l
-rw------1用户01用户258048六月17日10:30核心
-rw-r--r--1用户01用户144用户6月17日10:23 main.c
-rwxr-xr-x 1用户01用户14960六月17日10:24读取
-rw-r--r--1个用户01个用户300个用户6月17日10:23读.c
$gdb./read./core
GNU gdb(gdb;openSUSE Leap 42.2)7.11.1
版权所有(C)2016免费软件基金会。
...
[新LWP 24468]
核心由./read生成。
程序以信号SIGSEGV终止,分段故障。
0 0x000000000040071b处于打开状态(名称=0x400834“hi.txt”),位于read.c:9
9 char*outname=strcat(名称“.rzip”);
在现代发行版上,随着对
核心
文件的控制权转移到系统,生成核心
文件变得更加复杂。根据您的发行版,您可以使用coredumpctl
实用程序来检索核心文件。“hi.txt”
没有空间来组合其他字符串。例如open(“hi.txt”)代码>-->字符文件名[256]=“hi.txt”;打开(文件名)编码>并避免使用诸如open
、read
、write
和close
@BLUEPIXY-Hmm之类的名称,我似乎仍然有seg故障。另外,我将接受您的建议并更改这些函数名。编辑:现在已经修好了。我应该改用什么名称?例如open
-->my\u open
。
void open(char *);
char read();
void write(char);
void close();
int main()
{
open("hi.txt");
write('c');
close();
return 0;
}