linux 文件 *** 作函数fgetc遇到的一个问题。

linux 文件 *** 作函数fgetc遇到的一个问题。,第1张

char类型其实就是数字,ASCII值,可以把类型写成int.

#include<stdio.h>

#include<stdlib.h>

int main()

{

char temp          

FILE *fp=fopen("write.c","r+")

FILE *fw=fopen("out.c","a")

while ((temp=fgetc(fp))!=EOF) //

{   //这个地方我很奇怪fgetc的返回值类型书上写的是int,为什么很多书上写的就是char

fwrite(&temp,1,1,fw)

}

fclose(fp)

fclose(fw)

exit(0)

}

不管什么情况,我觉得你首先该把if那行的分号给删了

你的本意是在if判断成功的条件下才做while,现在这个分号使得你的if无论判断成功与否,都会执行while,于是我很怀疑你出错的时候fopen是否真的成功了

linux内存管理把这个内存空间分为了两块 一块是0-3G的用户空间,一块是3G-4G的内核空间。一般的程序分配内存是在用户空间分配。所以,这个地址是正常的。

malloc分配内存的时候,是在一个线性区里面分配,每个程序都有属于自己的线性区。如果这个地址恰好分配在不属于自己进程的线性区里面。那么肯定是会报段错误。

段错误不是内核空间才会发生的事情。

用户程序只能访问属于自己的线性区,这个线性区是属于用户空间的。用户程序不能直接访问内核空间。

这些知识都是属于linux内核的。如果不清楚的话,可以看看内核方面的书。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7340631.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存