scanf family API 高级用法

本文详细解读了scanf函数的高级用法,包括如何从字符串中提取特定长度的字符串、到指定字符为止的字符串、仅包含特定字符集的字符串,以及特殊模式的使用。同时,文章还探讨了fscanf函数的功能与注意事项,为读者提供了一个全面的scanf函数指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。但新手可能并不知道处理字符串时的一些高级用法,这里做个简要说明吧。 

1. 常见用法

以下是引用片段: 
  char str[512] = {0};  
  sscanf( "123456 ", "%s ", str);  
  printf( "str=%s\n ", str);  

2. 取指定长度的字符串

如在下例中,取最大长度为4字节的字符串。 

以下是引用片段: 
  sscanf( "123456 ", "%4s ", str);  
  printf( "str=%s\n ", str);  


3. 取到指定字符为止的字符串

如在下例中,取遇到空格为止字符串。 

以下是引用片段: 
  sscanf( "123456 abcdedf ",  "%[^ ] ",  str);  

  printf( "str=%s\n ", str);  


4. 取仅包含指定字符集的字符串

如在下例中,取仅包含1到9和小写字母的字符串。 

以下是引用片段: 
  sscanf( "123456abcdedfBCDEF ", "%[1-9a-z] ", str);  
  printf( "str=%s\n ", str);  

5. 取到指定字符集为止的字符串

如在下例中,取遇到大写字母为止的字符串。 

以下是引用片段: 
  sscanf( "123456abcdedfBCDEF ", "%[^A-Z] ", str);  
  printf( "str=%s\n ", str);  


6. 特殊格式

如何解释 fscanf(fd,"%*[^\n]")
"%[^\n]"表示读输入字符串,直到碰到字符‘\n’为止,其中^表示否的意思

7. 总结

Scanf(格式化字符串输入),相关函数 fscanf,snprintf,sscanf,格式详解!

#include <stdio.h>

 int scanf(const char *format, ...);
函数说明 scanf()会将输入的数据根据参数format字符串来转换并格式化数据。Scanf()格式转换的一般形式如下
%[*][size][l][h]type
以中括号括起来的参数为选择性参数,而%与type则是必要的。
* 代表该对应的参数数据忽略不保存。
size 为允许参数输入的数据长度。
l 输入的数据数值以long int 或double型保存。
h 输入的数据数值以short int 型保存。
底下介绍type的几种形式
%d 输入的数据会被转成一有符号的十进制数字(int)。
%i 输入的数据会被转成一有符号的十进制数字,若输入数据以“0x”或“0X”开头代表转换十六进制数字,若以“0”开头则转换八进制数字,其他情况代表十进制。
%0 输入的数据会被转换成一无符号的八进制数字。
%u 输入的数据会被转换成一无符号的正整数。
%x 输入的数据为无符号的十六进制数字,转换后存于unsigned int型变量。
%X 同%x
%f 输入的数据为有符号的浮点型数,转换后存于float型变量。
%e 同%f
%E 同%f
%g 同%f
%s 输入数据为以空格字符为终止的字符串。
%c 输入数据为单一字符。
[] 读取数据但只允许括号内的字符。如[a-z]。
[^] 读取数据但不允许中括号的^符号后的字符出现,如[^0-9].
 
返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。
嵌入式Linux中使用C语言读写网络可以使用Socket编程来实现。Socket编程是一种应用程序接口(API),它提供了一种标准的方法来进行网络通信。在嵌入式Linux中,可以使用Socket API来创建套接字、连接到服务器、发送和接收数据等。 以下是使用C语言读写网络的基本步骤: 1. 创建Socket套接字 使用socket()函数创建一个Socket套接字,指定协议(如TCP或UDP)和端口号。 2. 连接到服务器 使用connect()函数连接到服务器,指定服务器的IP地址和端口号。 3. 发送数据 使用send()函数发送数据到服务器。 4. 接收数据 使用recv()函数从服务器接收数据。 5. 关闭套接字 使用close()函数关闭套接字。 下面是一个简单的示例代码,演示了如何使用C语言读写网络: ``` #include <stdio.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> int main(void) { int sock; struct sockaddr_in server; char message[1000], server_reply[2000]; // 创建Socket套接字 sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { printf("Could not create socket"); } // 设置服务器地址和端口号 server.sin_addr.s_addr = inet_addr("192.168.0.1"); server.sin_family = AF_INET; server.sin_port = htons(8888); // 连接到服务器 if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) { perror("connect failed. Error"); return 1; } // 发送数据 printf("Enter message : "); scanf("%s", message); if (send(sock, message, strlen(message), 0) < 0) { puts("Send failed"); return 1; } // 接收数据 if (recv(sock, server_reply, 2000, 0) < 0) { puts("recv failed"); } puts("Server reply :"); puts(server_reply); // 关闭套接字 close(sock); return 0; } ``` 在上面的示例代码中,我们使用了Socket API来创建套接字、连接到服务器、发送和接收数据。在实际的应用中,还需要对错误进行处理和异常情况进行处理,以确保程序的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值