当前位置:  技术问答>linux和unix

linux下的c语言怪现象

    来源: 互联网  发布时间:2016-08-13

    本文导语:  一个奇怪的现象,想请教一下大家,就是一个写文件的操作,代码如下: #include  #include  #include  #include  #include  #include  #include  int main() { //char g; int fd; char *buf;          char g; char *readbuf; int readlen; ...

一个奇怪的现象,想请教一下大家,就是一个写文件的操作,代码如下:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
int main()
{
//char g;
int fd;
char *buf;
         char g;
char *readbuf;
int readlen;


if((fd=open("test.c",O_RDWR|O_CREAT|O_APPEND,7*8*8))==-1)
{
perror("create file errorn");
exit(0);
}
printf("please input the string.n");
if(gets(buf)==NULL)
{
printf("get string error:%sn",errno);
exit(0);
}
if(write(fd,buf,strlen(buf))==-1)
{
printf("write file error:%sn",errno);
exit(0);
}
write(fd,"n",1);

close(fd);
return 0;
}
在这段代码中,当我把char g定义在char *buf之前时,运行时就会报段错误,但放在它后面就不会报错;
而且如果我把char *buf定义成char buf[20],则不管char g定义在前面还是后面都不会出错,请问这是何故呀?

|
char *buf;  /* buf未分配内存就使用,很可能报段错误. 不报是因为凑巧 */
char buf[20]; 分配了内存,但是gets不安全,你一次输入很长的字符串就会报错,建议使用fgets

|
char *buf没有分配空间,没有初始化buf指向的是什么地方没准,运行的时候基本上就是听天命了,什么错误都可能,不出错误也可能。

char buf[20]分配了空间,buf指向这个空间,运行的结果是可预期的。

|
跟char g在哪里定义没有关系。
具体原因LZ兄弟们已经说了。指针没赋值之前,也所指向的内容是不可预期的。

|
LZ补习补习C语言

定义 char *g  cha g[20],是不一样的。


主要是涉及到C语言内存分配问题。



|
open("test.c",O_RDWR|O_CREAT|O_APPEND,7*8*8))==-1)
觉得应该是上面这句有问题。有O_CREAT标志,就不应该有O_APPEND。

|
基本功

|
那如果我初始化为:char *buf = NULL;行不行啊?

    
 
 

您可能感兴趣的文章:

  • 怪现象,开机时刚进入到root login,linux就自动关机了,如何修复?
  • linux服务器,大磁盘挂载分区,不定期出现“只读”现象
  • Linux下,鼠标的一点怪现象
  • 为什么linux中的web浏览器会打不开呢 而且打开却是这种现象 参照图
  • 关于linux中的一个奇怪的现象, 大家都来看哦。
  • Linux访问Windows的怪现象
  • 请教一个问题:程序在Linux 2.4.20内核上跑无问题。但在2.4.19内核上跑就出现段错误现象。查了一星期,毫无头绪,万望各位指点。
  • 问一个在Linux内核代码中经常出现的语法现象?
  • 用source insigt 看Linux0.11内核完全注释中的内核源码时,发现了一个有关c语言语法的奇怪现象。大虾请进,帮小弟解解惑。有重谢!
  • arm-linux-gcc 编译的c代码中atof函数的怪现象
  • 一个关于inet_ntoa函数在printf中的奇怪现象(不知算不算linux的bug:-)
  • Linux下地址转换函数的问题,在IPv4下和IPv6下现象不同?
  • 使用ST16C2552IJ扩展linux串口收发数据不全问题.谁遇到这现象.
  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • 求助,在linux下,c语言和汇编语言的接口是什么?
  • linux下进程间通信:共享内存原理及具体用法举例(基于c/c++语言)
  • 我安装的linux时默认语言选择的是中文,又乱码,怎么可以解决?怎么更改默认语言成英文?
  • LINUX 或者Windows 如何保证一个进程只有一个实例在运行?如果是C语言,JAVA语言开发,又怎么样保证?
  • LINUX下面C语言和C++语言所开发的软件有什么区别
  • 有了c语言基础,如何入手学习用c语言linux网络编程
  • Linux 区分语言版本吗?
  • 一个小问题。Linux下编程语言的问题。
  • 我是一个linux新手,不知道如何在linux进行C语言的编写和使用?
  • LINUX下语言的困惑(超菜)
  • 初学Linux要看什么书?, 请问Linux下C语言编程怎么设置环境?
  • LINUX新手提问,如何在LINUX下添加语言项?
  • linux新手想请问大家你们在linux下通常用什么开发语言和工具(C多点还是C++多点还是pascal ?还有工具方面?)
  • LINUX下 C语言编程中 DIR 是做什么用的~?
  • 谁能简单介绍一下LINUX上的各种语言脚本的功能.
  • 什样在linux中学习c语言?
  • linux下的汇编语言的软件是什么?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • c/c++ iis7站长之家
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • linux c下利用srand和rand函数生成随机字符串
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 我们网站的服务器从windows2000迁往linux,ASP程序继续使用,可是我连LINUX的皮毛都不了解,大家告诉我LINUX下怎么建网站??
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • 中文Linux与西文Linus分别哪一个版是权威?I认为是:中科软的白旗Linux与西文的绿帽子Linux!大家的看法呢?
  • Linux下chmod命令详细介绍及用法举例
  • 我重装了winme,却进不了Linux了,而我现在又没有Linux光盘,也没有Linux启动盘,还有没有办法?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3