2014-08-27 65 views
-3

获得双值I有一个C方案产生或填充炭的载体中包含的字符串:从字符串

......................... 
char value[160] 
double* d = NULL; 
char * pEnd = NULL; 

...................................... 

与填充值RX之后:551.54 455.61 98

我向得到这个双重价值, 这里我已经试过:

printf(" the string value is %s \n",value); // works fine 
for (i = 0; i<3 ;i++) { 
    if(i ==0) 
     d[i] = strtod(value,&pEnd); 
    else 
     d[i] =strtod(pEnd,&pEnd); 
    printf(" the value of d is %lf\n",d[i]); 
} 

程序与Segmentation fault错误崩溃。任何想法我可以如何解决这个问题? 在此先感谢

+2

char * pEnd = NULL; ? 另外,使用malloc()或calloc()指针。 – Igor 2014-08-27 14:07:11

+0

请发表真实的代码。 'char * pEnd = = NULL;'也不会为(i = o:i <3; i ++)'编译。 – interjay 2014-08-27 14:09:49

+0

@interjay真正的代码和汇编不是一个程序我没有得到任何错误 – Engine 2014-08-27 14:16:31

回答

2

您需要为d分配空间。

尝试

double d[3] = {0}; // double *d = NULL; 

如果你想使用d为指针,以保持,分配

double *d = NULL; 
d = malloc(3 * sizeof *d); 
if (d != NULL) { 
    // ... your code using d 
    free(d); 
} else { 
    fprintf(stderr, "Unable to allocate memory for `d`.\n"); 
    exit(EXIT_FAILURE); 
} 
+0

感谢您的回答有一个问题可以通过未知数量的双值来完成吗? – Engine 2014-08-27 14:37:20

+1

使用第二种方法(使用指针而不是数组),您可以使用'realloc()'来根据需要增加分配的内存。但如果您只需要打印它们(或一次只使用一个),则可以使用简单变量来解决您的问题。 – pmg 2014-08-27 14:40:29

+0

非常感谢您的帮助 – Engine 2014-08-27 14:42:56

0

dpEnd都没有被分配。此外,您已初始化io,如果它不是拼写错误(对于0?),则是未声明的变量(这会阻止您的代码表单编译)。

+1

'pEnd'不需要分配。它最终将指向输入字符串中的某处。 – pmg 2014-08-27 14:25:11

0

注意这个 -

char * pEnd = = NULL; // you should not use '==' here 

首先修复此TO-

之前分配空间
char * pEnd = NULL; 

然后尝试分配内存dpEnd并尝试它。