c语言字符数组一些启示
来源:互联网 发布:电脑连接网络出现红叉 编辑:程序博客网 时间:2024/05/19 02:03
最近博主在学习《linux系统编程》,所以想记下来学习的一些心得,与大家分享,也备以后回顾只用。
第一天,就从我在今天学习过程遇到的问题写起,博主今天在学习标准IO库,遇到一个问题,关于字符指针的问题,代码如下:
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main() 5 { 6 FILE *stream; 7 char *s; 8 int c; 9 int n=6; 10 stream=fopen("./test.txt","r"); 11 while(--n>0 && (c=fgetc(stream))!=EOF) 12 { 13 *s++=c; 14 } 15 *s='\0'; 16 printf("s=%s\n",s); 17 exit(0); 18 }~本程序很简单,就是以标准流的形式打开一个文件,然后从文件读取n-1个字符,但是运行这个程序的时候,会出现段错误,百度之后,得知,是因为使用了未申请的内存或者申请的内存有错误,那么问题出现在哪了?
通过查资料得知问题出现在char *s 和*s++=c。因为在程序中,字符指针没有初始化,即没有给该指针赋值(s不知道指向何处),那么如果给该指针赋值,那么值不知存哪去,而s++也没有意义。
所以应该先给s赋值一个地址字符数组的地址,然后在往这个地址赋值,加1赋值等等。所以改进代码如下
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main() 5 { 6 FILE *stream; 7 char *s; 8 char str[1024]; 9 s=str; 10 int c; 11 int n=6; 12 stream=fopen("./test.txt","r"); 13 while(--n>0 && (c=fgetc(stream))!=EOF) 14 { 15 *s++=c; 16 } 17 *s='\0'; 18 printf("s=%s\n",str); 19 exit(0); 20 }运行结果如下图所示:
由于较少使用c语言,所以一些基本的知识点都忘了,所以我也感受到了,学习语言一定要多写,看着都懂,但是当自己写的时候,就会碰到各种细节问题。平时看起来很简单的问题,当自己亲身躬为的时候,有时候并不是那么简单。
可能我写很基础或不是完全正确,希望大神可以指点指点。
0 0
- c语言字符数组一些启示
- C语言字符数组
- C语言----字符数组
- C语言字符数组
- c语言字符数组
- C语言中对字符数组的一些操作(字符数组分割)
- C语言字符串、字符数组
- C语言数组、指针、字符
- C语言字符数组sizeof
- c语言的字符数组
- C语言字符数组移位
- C语言中的字符数组
- C语言字符数组初始化
- c 语言题 -字符数组
- c语言中的字符数组
- C语言字符数组移位
- C语言字符指针和字符数组
- C语言--一维数组,字符数组
- HDU 3449 Consumer
- pmp网站
- 成功领导力的10大关键
- Linux多线程实践(2) --线程基本API
- HDU 1269 迷宫城堡
- c语言字符数组一些启示
- 求1~r内有多少个数与n互素
- DVB-C系统中QAM调制与解调仿真
- Palindrome Partitioning II
- linq to DataTable group by用法(VB.Net语法)
- D3D9中的蒙皮骨骼动画
- nyoj 471 好多树 (欧拉函数+容斥定理)
- HDU5171 GTY's birthday gift(矩阵快速幂)
- 2015年移动互联网十大趋势