2014-08-27 2 views
-3

У меня есть C программы, которые генерируют или заполнить вектор полукокса со строкой как:Получение двойных значений из строки

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

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

После заполнения значения с для ого: 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

+0

Пожалуйста, введите реальный код. Ни 'char * pEnd = = NULL;' и 'for (i = o: i <3; i ++)' не будет компилироваться. – interjay

+0

@interjay, что реальный код и компиляция не является программой, я не получаю никакой ошибки – Engine

ответ

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

+1

Используя 2-й метод (с указателем, а не массивом), вы можете увеличить выделенную память по мере необходимости с помощью 'realloc()'; но если вам просто нужно распечатать их (или использовать их по одному), вы можете решить свою проблему с помощью простой переменной. – pmg

+0

спасибо за вашу помощь – Engine

0

Ни один d не pEnd, похоже, выделено. Кроме того, вы инициализировали i до o, который, если он не является опечаткой (для 0?), Является необъявленной переменной (что предотвратит компиляцию формы кода).

+1

'pEnd' не нужно выделять. Он, в конечном счете, укажет где-то внутри входной строки. – pmg

0

Примечание this-

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

Первое исправление этой TO-

char * pEnd = NULL; 

Затем попытайтесь выделить память для d и pEnd и попробуйте.

Смежные вопросы