2017-07-29 89 views
0

我一些C++代碼(find.cpp)應該在字符序列的末尾取兩個數字並將它們打印爲整數。函數返回0與任何輸入

find.cpp:

#include <iostream> 
#include "find_num.h" 

int main() { 
    char test[6] = { 't', 'e', 's', 't', '4', '2' }; 

    std::cout << find_num(test) << std::endl; 
} 

find_num.h:

#include <sstream> 

int find_num(char char_in[]) { 
    char char_out[2]; 
    int out; 

    for (int i = 0, end = true; end!=false; i++) { 
     if (char_in[i] == 0) { 
      for (int j = 0; j < 2; j++) { 
       char_out[j] = char_in[i - 2 + j]; 
      } 
      std::stringstream(char_out) >> out; 
      end = false; 
     } 
    } 

    return out; 
} 

出於某種原因,當我編譯和運行find.cpp,它總是輸出0,但我會指望它打印42.我該如何解決這個問題?謝謝!

+0

你沒有一個*腳本*,你不跑* *一個'.cpp'文件。 – LogicStuff

+0

它適用於我的編譯器(Dev C++)並打印42.它可能與您的編譯器有關。 –

+0

@Kemal它與他的編譯器無關。 –

回答

3

此字符串:

char test[6] = { 't', 'e', 's', 't', '4', '2' }; 

不會是空值終止。你想:

char test[7] = { 't', 'e', 's', 't', '4', '2', 0 }; 

或更好:

char test[] = "test42"; 
+0

謝謝。出於某種原因,當我在同一個腳本中使用這個函數時,它在第七個元素沒有測試的情況下工作。爲什麼? – maknel

+1

未定義的行爲 - 任何事情都可能發生,包括出現「工作」的程序。 –