c语言FILE结构和字符串读取

c语言FILE结构和字符串读取

软件:gcc 版本 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)

本文通过FILE结构 stdio.h中的定义, 解析c语言对标准输入和文件输入的实现,有助于深入理解和使用stdio.h 中的函数。

1 FILE结构


1.1 /usr/include/stdio.h

49行

typedef struct _IO_FILE FILE;

75行

#include <libio.h>

164-167行

/* Standard streams.  */
extern struct _IO_FILE *stdin;          /* Standard input stream.  */
extern struct _IO_FILE *stdout;         /* Standard output stream.  */
extern struct _IO_FILE *stderr;         /* Standard error output stream.  */

stdio.h文件的49行和164-167行显示:标准输入stdin、标准输出stdout和标准错误stderr,均为FILE结构的指针。

FILE结构的具体定义在文件libio.h中。

1.2 /usr/include/libio.h

123-138行

#define _IO_USER_BUF 1
C语言中进行字符串读取有多种方法: - **使用`scanf`函数**:该函数可以读取字符串,但它以空格、制表符`\t`或换行符`\n`作为字符串的结束标志。若输入的字符串包含空格,`scanf`只会读取空格之前的部分。为防止缓冲区溢出,要确保字符数组有足够的空间来存储输入的字符串。示例代码如下: ```c #include <stdio.h> int main() { char str[100]; scanf("%s", str); printf("输入的字符串是:%s\n", str); return 0; } ``` 使用时输入`hello world`,`str`中只会存储`hello` [^2]。 - **使用`fgets`函数**:适用于读取含空格的字符串。其函数原型是`char *fgets(char *str, int n, FILE *stream)` [^2]。 - **使用`gets`函数**:对于交互式程序较为方便,它从系统的标准输入设备(通常是键盘)获得一个字符串。该函数通过判断遇到的第一个换行符`\n`结束输入,按回车键可产生这个字符。它读取换行符之前(不包括换行符)的所有字符,并在这些字符后添加一个空字符`\0`。示例代码如下: ```c #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #define MAX 81 int main() { char name[MAX]; char *ptr; //指向char的指针 printf("输入姓名:\n"); ptr = gets(name); //使用一个地址吧字符串赋值给name //gets()函数使用return关键字返回字符串的地址 printf("name, %s\n", name); printf("ptr, %s\n", ptr); system("pause"); return 0; } ``` 不过需要注意的是,`gets`函数由于存在缓冲区溢出的风险,在一些编译器环境中可能不被推荐使用 [^3]。 - **直接字符赋值**:可以逐个字符给字符数组赋值,最后手动添加字符串结束符`\0`。示例代码如下: ```c #include <stdio.h> int main(void){ char str[6]; str[0] = 'V'; str[1] = 'V'; str[2] = 'C'; str[3] = 'A'; str[4] = 'T'; str[5] = '\0'; printf("字符串 str 为 \"%s\"。 \n", str); return 0; } ``` 这种方式适合已知具体字符内容的情况 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值