2011-03-24 100 views
0
char * temp_array; 

strcpy(temp_array, argv[i + 1]); 

      for(int j = 0; j < 8; j++) 
      { 
       fann_input[j] = atoi(temp_array[j]); 
       printf("%f\n", fann_input[j]); 
       printf("o%c\n", temp_array[j]); 
      } 

fann_input是一個浮點數組。麻煩轉換字符串從命令行到浮點數組

上的atoi線

,我得到的錯誤:

src/main.cpp: In function ‘int main(int, const char**)’: 
src/main.cpp:117: error: invalid conversion from ‘char’ to ‘const char*’ 
src/main.cpp:117: error: initializing argument 1 of ‘int atoi(const char*)’ 

任何想法?

每個字符是1或0

回答

1
  1. main原型是int main(int argc, char **argv),即使argv應該被認爲是恆定。
  2. 由於temp_array未初始化,因此您正在複製到內存的隨機部分。
  3. 您對單個字符而不是字符串調用atoi
  4. atoi轉換爲int而不是float,但這不應該是{0,1}輸入的問題。

要在字符串轉換s個人數字到float,做

float x = s[i] - '0'; 

(假設其中1 0如下我從來沒有聽說過的一個ASCII-或EBCDIC兼容的字符集字符集,那是不正確的。)

0

你能發佈完整的代碼嗎?

你在循環外使用「i」,然後在for循環中重新定義它,然後它看起來像你試圖將字符串的每個CHARACTER轉換爲它自己的float?

+0

啊,概率得到索引goof ups。我忘了我已經在循環中了。我會發布我的所有代碼,但它是> 200行/ p – NullVoxPopuli 2011-03-24 17:48:18

+0

然而,這並不能解決問題 – NullVoxPopuli 2011-03-24 17:48:54

+0

好吧。那麼,轉換每個角色你想做什麼?因爲atoi()需要一個完整的「字符串」(空終止的字符數組) – MarcB 2011-03-24 17:49:13

1

temp_array[i]正是編譯器告訴你的 - charatoi()將字符串作爲其唯一參數。您需要更正算法以將字符串傳遞給atoi()

0

對於一個喲,實際上並沒有在temp_array中分配任何空間。這會給你一個很好的運行時間的錯誤。

下面的代碼行是錯誤的,給你你的錯誤:

fann_input[i] = atoi(temp_array[i] 

你傳入1個字符時,它需要一個字符串ATOI。

而且

strcpy(temp_array, argv[i + 1]); 

以I聲明之前。

+0

它不是,它在外部循環中。我沒有發佈我的所有代碼,因爲有很多。 – NullVoxPopuli 2011-03-24 17:58:28

0

您還沒有分配任何空間用於temp_array,因此當您將strcpy放入它時,您將隨機寫入。當它是一個字符數組時,您將temp_array當作字符串數組處理,然後嘗試將單個字符轉換爲浮點數。 atoi將轉換爲int而不是floatdouble。您需要使用atof

怎麼樣一個C++ - 式的方式就是這樣,更妙的是使用流:

#include <iostream> 
#include <string> 
#include <vector> 

int main(int argc, char* argv[]) 
{ 
    typedef std::vector<std::string> Args; 
    Args args(&argv[1], &argv[argc]); 
    std::vector<double> results; 

    for(Args::const_iterator i = args.begin(); i != args.end(); ++i) 
    { 
     results.push_back(atof(i->c_str())); 
    } 

    return 0; 
} 
3

各類這裏不好:

  1. 您嘗試將字符串複製到未初始化char*temp_array已聲明,但從未初始化)

  2. atoi期望指向整個字符串的指針bu T優被傳入一個字符(temp_array[j]

  3. fann_inputfloat數組(你說的),但你試圖用int s到填充它(這是什麼atoi回報)

  4. 你是在C++中使用C構造(指針,atoi等)

  5. 您正在一遍又一遍地遍歷相同的命令行參數。

在這些方面做更多的事情。未編譯的psudocode如下。錯誤處理留給你作爲練習。

for(int j = 0; j < 8; ++j) 
{ 
    stringstream ss; 
    ss << argv[j+1]; // copy cmd line param to stream 
    float val = 0.0f; 
    ss >> val; // convert to a float 
    fann_input[j] = val; // save it! 
}