关于sscanf的疑问,求解!
 #include<stdio.h>
#include<stdlib.h>
int main()
{
    char buf[256];
    int size;
    int *variable_array;
    int i;

    printf("Please Input Array size:");
    fgets(buf,256,stdin);
    sscanf(buf,"%d",&size);

    variable_array=malloc(sizeof(int)*size);

    for(i=0;i<size;i++)
        variable_array[i]=i;
    for(i=0;i<size;i++)
        printf("variable_array[%d]........%d\n",i,variable_array[i]);

    return 0;
}

中间的fgets和sscanf怎么用的啊?明明buf是字符串,却要输入数字,输入数字就算了,好歹也是字符型吧,sscanf将char以%d输入给size应该是char的asscii码吧,为什么还真的就得到了这个数字?

2个回答

这是字符串的格式化输入,sscanf和scanf差不多,只不过后者是从屏幕输入,而前者是从字符串输入。至于为什么它能把一串用ascii码表示的字符串转换成数字,那是sscanf内部完成的,有兴趣的话可以看源码。初学只要记住和用scanf一样使用sscanf就可以了,只不过获取信息的对象从屏幕变成了字符串。

1: fGets 是从一个文件流中读取数据
2:stdin是标准输入 std即standard(标准),in即input(输入),合起来就是标准输入。 一般就是指键盘输入到缓冲区里的东西
3: sscanf是一个格式化输入的一个标准库函数。他是以默认是以空格来截取字符(先这么理解把)比方说你有一个字符串为 10空格20
那么就可以用sscanf(buf,"%d%d",&i,&j);来给i ,j 赋值

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
sscanf ,sscanf ,sscanf

sscanf ,sscanf ,sscanf

sscanf函数的高级用法

sscanf函数的高级用法 sscanf函数的高级用法 sscanf函数的高级用法 sscanf函数的高级用法

疑问,求解?

对于初级入门的学生来说,学习什么最简单?最容易懂?

关于深度学习理论方面的一些疑问

1、“玻尔兹曼机(Boltzman Machine)”  在深度学习里到底有什么用? 答:我是在看了“Deep Learning(深度学习)学习笔记整理系列之(六)”这篇博客时看到的关于玻尔兹曼机的东西,它在深度学习里的用处:Deep Learning假设神经网络是多层的,首先用Boltzman Machine(非监督学习)学习网络的结构,然后再通过Back Propagation(监督学习

再次体验 sscanf函数的强大

本来好复杂的一个文件读写程序,只要经过sscanf 函数出马,立即减少了几百行 处理文件字符 #photo  21 photo.capturemode=Single #Single (2S Timer) (5S Timer) (10S Timer)  22 photo.resolution=2MHD #2MHD VGA 1.3M //12M 10M 8M 5M 3M  23 photo

sscanf切割字符串

头文件 #include(stdio.h) 定义函数 int sscanf (const char *str,const char * format,........); %[ ] 的用法:%[ ]表示要读入一个字符集合, 如果[ 后面第一个字符是”^”,则表示反意思。                      [ ]内的字符串可以是1或更多字符组成。空字符集(%[])是

C++ sscanf函数用法

转自:http://blog.csdn.net/zhuimengzh/article/details/6678946

sscanf 函数引起的段错误

#include int main(int argc,char *argv[]) { int i, idx = 0; char str[20]; sscanf("aaa bbb ccc", "%*s %s%n", str, &idx); printf("%s\n%d\n", str, idx); return 0; }运行时,提示段错误。

sscanf和%n的用法回忆

Problem : ACM入门系列:sscanf函数的使用 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 0  Solved: 0 [Submit][Status] Description 在比赛中,sscanf函数是非常有用的,通过它可以很高效地处理字符串问题。有兴趣的同学可以自己搜索相关资料(google等)。对于本问题,请求出每行

C语言SSCANF函数

头文件 #include             定义函数 int sscanf (const char *str,const char * format,........);             函数说明             sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。

用 sscanf 解析字符串时结尾的判断

常用 sscanf 解析字符串,处理错误也很简单:sscanf 会返回实际解析并赋值了的域的个数,判断一下是否和期望的一致即可。今天却遭遇一个解析地址的 bug,是由于地址本应该是“127.0.0.1:30000”被写成 “127.0.0.1:30000:127.0.0.1:30000”,原来用 sscanf 解析,判断结果等于5就认为正确,却没有判断额外的字符。修正:    bool Assign(const char* src)     {         unsigned int b1, b2,

巧用sscanf之%n的使用

在使用sscanf读取字符串中的信息时,是不是偶尔会有需求——想知道读取部分数据后,读取了多少个字符。比如字符串s=&quot;123.45,fdda&quot;我们知道s中的第一个字段是浮点数,于是我们用double a;sscanf_s(s,&quot;%lf&quot;,&amp;amp;a);读取出了123.45,存到变量a中,但是字符串s中下一个字段的起始指针该如果获得呢,我们怎么才能知道读取完第一个浮点数后,下一字段的起始位置在字符...

使用sscanf 提取字符串

char buffer[] = "2423|dfgdfg|329234"; char str1[20], str2[20], str3[20]; sscanf(buffer, "%[^|]|%[^|]|%s", str1, str2, str3); 差不多这样子,%[^|]表示读到|为止,后面|读走紧接着的|,下一个同理,最后%s读走剩余的字符串。 实际应用要麻烦很多,要注意str1、st

由一段代码说开去——sscanf与string

1 #include 2 #include //大概是字符串流 3 #include string> 4 using namespace std; 5 6 //c++方法 将double数值 转换成string对象 7 string convertToString(double x) 8 { 9 ostringstream o; 10 if(o//将

由sscanf用错引出bug,总结下sscanf用法

1、我使用sscanf犯下的错误 先看下代码:

sscanf 、scanf函数与空白处理

    开始使用sscanf与scanf函数时,其对空白的处理让我郁闷了很久,今天抽空研究了颇有收获,随笔记下,望对网友们有所帮助    int sscanf(char *string, char *format, arg1, arg2, ...)与int scanf(char *format, ...)是用于从字符串(或输入流)中依据指定的格式提取目标数据的函数,其提取规则大体如下:    1.提取数值类型数据(format中%d之类所对应数据):       使用了一个%d说明符来读取一个整数,scan

浅谈sscanf陷阱

sscanf虽然是个不错的函数,它可以很简单的将字符串转成特定的格式,比如转成整数、浮点数等等。但是如果使用不慎,会带来很大的麻烦。 今天笔者在使用sscanf时,就遇到了一个诡异的问题。 代码的书写如下: //begin added by liuzhiyong 20160504 int HexToBin(char *src,char *bin,int length) { int

sscanf的用法误区 导致越界访问

struct DATA { BYTE a; BYTE b; BYTE c; BYTE d; }; char *str = "fd"; DATA data; sscanf(str, "%02x", &data.a); 乍一看,程序没有什么毛病,笔者测试发现,上面这段程序实际上已经导致结构体变量b,c,d都被操作赋值了。 原因在于sscanf的参数为"%d" "%x"

原来sscanf函数可以这么强大

【sscanf()函数的使用详解】 在看ineedle代码的时候,看到一个C函数sscanf(), 挺熟悉,也觉得挺简单的一个函数,但是此时我愣住了: 看到这样的代码: sscanf(szLine,”%[0-9|_|-|a-z|A-Z|&|*]”,szTemp); /****************************************************************

Keil MDK sscanf 函数不支持的格式

结论:MDK不支持sscanf 函数中 格式说明符 的 A-Z这种写法,你需要把所有的情况列举出来才行。例子:sscanf(&quot;1,CHINA&quot;,&quot;%d,%[A-Z]&quot;,xx,xxx);//这句中的格式%[A-Z]在PC上是可以正常运行的。但是在MDK中则不能正确运行。因为MDk不支持A-Z这种范围写法,你需要改成%[ABCDEFGHIJKLMNOPQRSTUVWXYZ]这种形式。另外,IAR可以支...

sscanf的高级用法 正则表达式

sscanf() - 从一个字符串中读进与指定格式相符的数据。 函数原型: int sscanf( const char *, const char *, ...); int sscanf(const char *buffer,const char *format,[argument ]...); buffer存储的数据 format格式控制字符串 argument 选择性设定

sscanf中%*s用法

#include #include #include void main() {     char Buffer[512] = {" "}; char IP[512]={""}; char netmask[512]; strcpy(Buffer,"/sbin/ifconfig eth0 172.16.129.150 netmask 255.255.255.0 up");

用sscanf判断ip地址的正确性

由于看到那个遍历字符串去逐个判断的代码就觉得不简洁,虽然c语言中没有脚本语言那么爽,但是好歹还有一个sscanf吧。所以写了个小函数 #include #include /*该函数能够验证合法的ip地址,ip地址中可以有前导0,也可以有空格*/int isValidStr(char *buf,int *pAddr){ int part1,part2,part3,part

关于sscanf()返回值和识别问题

今天在写代码用到sscanf( )的时候发现了一个问题。根据百科上的sscanf()用法:给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 &quot;iios/&quot;过滤掉,再将非'@'的一串内容送到buf中12sscanf(&quot;iios/12DDWDFF@122&quot;, &quot;%*[^/]/%[^@]&quot;, buf);printf(&quot;%s\n&quot;, buf);这个例子可以取 / 和 ...

sscanf用法整理

函数原型: int sscanf(const char *buffer,const char *format,[argument ]...); 参数: buffer 存储的数据 format 格式控制字符串 argument 选择性设定字符串 sscanf会从buffer里读进数据,依照argument的设定将数据写回。 成功则返回参数数目,失败则返回0,错误原因存于errno中

sscanf()函数读取字符串中的数字

项目中需要读取形如“@FERFD,1451,368123.30,124.245,0.128,1.579,34.1966004,108.8551924”的字符串中以逗号间隔的数字,先是自己编了一个函数,可以读取指定逗号后的数字并转换为double型,函数原型:double wtof(char *str,int n) //n表示读取第几个逗号后的数字,效率还不错;后来发现利用sscanf()函数实现起来更简单:char buf[]="@FERPD,1451,368123.30,124.245,0.128,1.5

强大的sscanf函数

sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。 第二个参数可以是一个或多个 {%[*] [width] [{h | I | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号} 注: 1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就

sscanf函数注意问题

#include #include #include #define BUFFER 1024 int main(int argc,char **argv) {                         char cmd1[BUFFER] = {0};                         char cmd2[B

scanf/sscanf %[]格式控制串的用法

scanf中一种很少见但很有用的转换字符:[...]和[ ^...]。#includeint main() { char strings[100]; scanf("%[1234567890]",strings); printf("%s",strings);return  0; } 运行,输入:1234werew后,结果是:1234。通过运行可以发现它的作用是:如果输入的字符属于方括号内字符串中某个

stm32L151使用sscanf出现死机现象

由于项目中有好多字符串进行处理,因此使用sscanf进行特定字符串的提取; 发现多次调用sscanf函数后,出现系统死机现象; 查资料是由于堆栈不足导致的; 将Heap_Size       由200改为800问题得到解决 ;Heap_Size       EQU     0x00000200 Heap_Size       EQU     0x00000800

sscanf()--字符串格式化输入

sscanf() 的作用:从一个字符串中读进与指定格式相符的数据. 原型: int sscanf (const char str,const char format,……..); 说明: sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。转换后的结果存于对应的参数内。 成功则返回参数数目,失败则返回0。 注意:sscanf与scanf类似

sscnaf()&sscanf_s()在ip地址识别与判断上的应用

sscanf_s与sscanf函数在对字符串控制写入方面比较灵活,特别是对ip地址的处理,有效性判断等问题,都能很有效的解决。 //sscanf sscanf_s #include #include using namespace std; int main() { char buf[256]={0}; char bufs[256]={0}; sscanf("12345678

VC谨慎使用sscanf函数

我在开发过程中,使用了sscanf来读取用户输入的16进制数字到数组,结果遇到了堆栈被破坏.原来sscanf没有边界检查,他默认的输出参数为4个字节的.如果你像如下定义.int x=10;BYTE d[2];sscanf("FFFF","%2x%2x",d[0],d[1]);  如果你这样的话,堆栈里的X将被破坏,以为sscanf的输出参数默认是4字节的.所以当调用第一个d[0

【小记备忘】之sscanf 安全方法 sscanf_s【2014.04.23】

欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611  sscanf_s 使用的时候,要指定最大长度。。 static const char *s_formatBaseSourceString = "{#%16s}{#%12s}"; //{#MyOutputFileName}{#MyAppVerPath}

sscanf进行字符串分离、提取。以及string与数值的相互转换

利用C中的sscanf函数可以分离字符串,甚至提取字符串中的数字。 当字符串的字符集较小时可考虑map. C++方法可使用ostringstream/istringstream.

sscanf用于匹配时间格式

char str[100] ="123568qwerSDDAE"; char lowercase[100]; int num; sscanf(str,"%d %[a-z]", &num, lowercase); printf("The number is: %d.\n", num); printf("The lowercase is: %s.", lowercase); int a,b

sscanf 从文件中直接解析数据

sscanf 从文件中直接解析数据,是非常强大的!!! 只是一定要注意函数解析字符串时,最好用char*,而不是CString

sscanf详解

一、sscanf函数原型 功能:从一个字符串中读进与指定格式相符的数据.  原型: int sscanf(char *str, char *format, mixed var1, mixed var2 ... );  参数1:str        用于输入的字符串 参数2:format  格式控制字符串 参数3:后面是变参,用来保存指定格式str的内容 二、format格式控制

字符串处理函数sscanf的使用(某些程度上替代正则表达式,很强大)

在处理字符串的程序当中,经常会分析字符串,从一大长串的字符串截取我们需要的数据,这如果通过自己手写函数来分析,虽然可以,但当你知道sscanf的功能,那就自己写函数分析就显得多此一举。 这些函数的使用都很简单,总结一下,等下次使用一目了然。俗话说:好记性不如烂笔头,记录下来就是效率。 以下源代码是本人测试的源文件,附带讲解注释。 [cpp] view

C语言之函数sscanf()的用法

函数原型: int sscanf( const char *, const char *, ...); int sscanf(const char *buffer,const char *format,[argument ]...); buffer存储的数据 format格式控制字符串 argument 选择性设定字符串 sscanf会从buffer里读进数据,依照fo

sscanf格式化拿取数据,时间值为例。

下面给出一个sscanf用法,格式化拿取数据的方式。 int iLen = strlen("YYYY-MM-DD HH:mm:ss"); if (strTime.length() >= iLen) { int iYear = 0; int iMonth = 0; int iDay = 0; int iHour = 0; int iMinute = 0;

C语言sscanf函数格式化参数用户手册

C语言基础之sscanf()函数格式化参数用户手册

用sscanf()从字符串中读数

将一个只有数字的字符串转换成实数,可以用atof(buf);但是如果字符串里包含其他非数字字符,就需要用到sscanf(). 例如从一个文件名字符串中提取时间: #include #include void main() { char buf[50]="VOL_20151001162015.h264"; double videoTime; sscanf_s(buf,"VOL_%lf.

强大的sscanf正则表达式

当 sscanf 与 正则表达式 结合,我们便可以非常方便地解析字符串了。         废话不多说,直入主题。对于字符串 :(注意,分隔符是 '\t' 不是空格 ! )         line ="2016-10-13    北京市海淀区    Monday    张三    学习",  从中解析出         date, place , time , person ,

sscanf和sprintf()函数使用说明

sscanf和sprintf()函数使用说明   sprintf()使用说明 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。 sp

用sscanf格式化MAC地址

今天要从配置文件中读MAC地址,习惯上写成sscanf (buf, "%02X:02X:02X:02X:02X:02X",        &mac[0],        &mac[1],         &mac[2],         &mac[3],         &mac[4],         &mac[5]    ); 因为看代码中,printf的时候都是这样的格式。在我的机器上写了测

sscanf()函数的使用及其实例

资料引自: 传送门sscanf函数原型:Int sscanf( const char * src, const char * format, ...); int scanf( const char * format, ...);这两个函数很相似,只是第一个函数以src(固定字符串)作为输入,而第二个函数以标准输入stdin读取输入; 其中的format是格式控制字符串,它包含控制字符(如:

利用sscanf()匹配字符串需要注意贪婪匹配

http://www.mysql100.com/c/c_error_list/2013/0130/332.html 利用sscanf()匹配字符串需要注意贪婪匹配 发布时间:2013-01-30 15:12 先来看看下面一段代码: #include int main() {   char de_info[64]="DE_smartmedia:

sscanf()提取数据的方法

程序中常对文件中的数据处理,处理的前提是提取数据,而sscanf是提取数据的好方法。     空白符,包括空格、回车、制表符、新行垂直制表符、进纸符,将输入的数据分为不同的域(格式化符为%c时除外,可以将空白符读入)。控制字符串中,每个格式化说明符(以%开始)可以将对应的数据域的数据存储,也可以忽略(常用如%*s,%[^a-z],控制字符串中的非空白符,如%dabc%d,会把abc两边的数字忽略

关于字符串中数字字符转化为数字 sscanf的使用以及strchr的使用

1.sscanf我也是今天第一次见到,这里提一下它的用法:   s={"(11,LL)"};  int v;   则:sscanf(&s[1],"%d",&v);  会将11赋值与int型数据v;  2.strchr   strchr(s,',');  其中s是字符数组名,返回的值为数组第一次出现的位置坐标;   m=strchr(s,',')-s;  则m=3。 .

相关热词 c# 不能序列化继承类 c# char* 调用 c# 开发dll模板 c#添加控件到工具箱 c#控制台组合数 编程计算猴子吃桃问题c# c# wpf 背景透明 随机抽取号码软件c# c# 开发环境 c# 属性和字段
立即提问