2017-07-29 10 views
0

文字シーケンスの最後に2つの数字をとり、整数として出力する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を出力しますどのように私はこれを修正することができますか?ありがとう!

+0

あなたは*スクリプトを持っていないと、あなたは* * '.cpp'ファイルを実行しないでください:

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

以上を:あなたが欲しいです。 – LogicStuff

+0

私のコンパイラ(Dev C++)で動作し、42を出力します。これはコンパイラに関係するかもしれません。 –

+0

@Kemal彼のコンパイラとは関係ありません。 –

答えて

3

この文字列:

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

はnull終端されません。 *

char test[] = "test42"; 
+0

ありがとうございます。何らかの理由で、同じスクリプト内に関数があると、7番目の要素を持つテストなしで機能しました。どうして? – maknel

+1

未定義の動作 - "動作する"ように見えるプログラムを含む何かが起こる可能性があります。 –

関連する問題