2014-08-27 63 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並嘗試它。