对应第一个操作数的字符数,为什么,这两行代码怎么理解?

size_t index ;
double result = 0;
char buf[] = "";
fgets(buf,buf_len,stdin);
char *endptr =NULL;
那么result = strtod(buf+index,&endptr);
index = endptr - buf;
index 
index = 0;

有只小跳蛙
浏览 71回答 2
2回答

精慕HU

index对应第一个操作数的字符数,这个前提是操作数前面没有空格一类另strtod自动跳过的字符。因为endptr是strtod转换字符串的结尾位置,比如buf中的字符串是1234abc,转换时将转换到1234为止,strtod发现字符a不属于合法数字内容,会在遇到a时结束转换,并另endptr指向a的这个位置。index=endptr-buf;会得到a字符前面有几个字符的计数。

汪汪一只猫

名称含义strtod(将字符串转换成浮点数)相关函数atoi,atol,strtod,strtol,strtoul函数说明编辑strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分。如123.456或123e-2。范例编辑#include<stdlib.h>#include<stdio.h>void main(){char *endptr;char a[] = "12345.6789";char b[] = "1234.567qwer";char c[] = "-232.23e4";printf( "a=%lf\n", strtod(a,NULL) );printf( "b=%lf\n", strtod(b,&endptr) );printf( "endptr=%s\n", endptr );printf( "c=%lf\n", strtod(c,NULL) );}执行:a=12345.678900b=1234.567000endptr=qwerc=-2322300.000000
打开App,查看更多内容
随时随地看视频慕课网APP