#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Extract(char input[], double output[])
{
int i, j, len;
i=0;
j=0;
len=0;
char s[50];
while(i<strlen(input)-1)
{
if(input[i]==' ') i++;
j=0;
s[0]='\0';
while(input[i]!=',')
{
if(input[i]==' ') i++;
s[j]=input[i];
i++;
j++;
}
s[j]='\0';
i++;
printf("%s - ", s);
output[len]=(double)atof(s);
printf("Element %d: %lf\n", len, output[len]);
len++;
}
printf("%d", len);
return len;
}
int main(){
char s[120]="0.1,0.35,0.05,0.1,0.15,0.05,0.2.";
double v[1000];
int len = Extract(s, v);
int i;
for(i=0; i<len; i++)
{
printf("%d: %lf\n", i, v[i]);
}
return 1;
}
我尝试运行此代码,但是即使编译正确,我也会遇到堆栈错误,有人可以帮助我吗?请注意,该字符串由一些用逗号分隔的十进制数字组成,并且该字符串以..>结尾
更新:也许文件夹中有些脏东西,但是现在我有一个输出:长度:320.1-元素0:0.0000000.35-元素1:0.0000000.05-元素2:0.0000000.1-元素3:0.0000000.15-元素4:0.0000000.05-元素5:0.000000分段错误(核心已转储)
由于我已经创建了线程,我仍然可以利用您的帮助将字符串转换为双精度,因为atof
转换为浮点型,这可能就是为什么它全部打印0.0000的原因?
#include
我认为我发现了问题:
','
。在输入末尾,您没有','
字符,而是具有'.'
,这将导致循环永远进行下去,从而导致段错误。您可以通过将输入的最后一个字符更改为','
来解决此问题。%lf
更改为%.2lf
。这里我展示了3个代码,其中第一个解决了段错误问题;第二个是对提取功能的详细说明(如所展示);第三,以许多可能的一种
改进形式编写的Extract函数示例。