2011-12-06 3 views
0

私は、次の手順を作成しようとしています:関数のパラメータとして文字列xとint y - 関数内で(x.length()<y)を使用できませんか?

void something(string x, int y) 
{ 
    if(x.length()<=y) 

    etc. 
} 

それはコンパイルが、コンピュータはビープ音し、その後クラッシュ、奇妙なシンボルのすべての種類をプリントアウトし、ナットを行きます。

私はprocedure.Iを作成して以来、xが未知の場合にif(x.length()<)を使用できないため、私は自分の文字列xをc-私はそれをする方法を知らない。

+1

どのような言語ですか?あなたのコードで 'something()'と呼んだことはありますか?どのように渡している変数を作成しましたか? – CanSpice

+0

C++はそのことについて残念な言語です! –

+0

タグ付けの問題 - 使用しているプログラミング言語を指定する必要があります – alonisser

答えて

2

あなたは物事が狂っている比較部分だと確信していますか?

私のテストプログラムtest

$ ./a.out 
Length larger 
Length smaller or equal 

NB:これがオンになっている

#include <string> 
#include <cstdio> 

using namespace std; 

void something(string x, int y) { 
    if(x.length() <= y) 
    printf("Length smaller or equal\n"); 
    else 
    printf("Length larger\n"); 
} 

int main(int argc, char** argv) { 
    string x = "This is a string"; 
    int y1 = 10; 
    int y2 = 20; 

    something(x, y1); 
    something(x, y2); 

    return 0; 
} 

g++ testでコンパイルが、これは実行が、所望の出力を生成し、a.outという名前の実行をもたらします、 Ubuntu、しかし私はこれが失敗するべき理由を考えることができません。 Windows。

+0

彼は間違った質問をして間違ったコードを表示していますが、これは彼が与えたはずの小さな簡潔なコンパイルの例の良い例です。 – AJG85

0

あなたの問題はおそらく、投稿されたコード以外の場所にあります。あなたが仮定している 'それは私が(x.length()<)xはまだ私はプロシージャを作成しているので、未知の場合は使用することはできません'と信じて、コードはあなたが関数を呼び出した後に実行されます指定された引数。文字列が正しく初期化されているかどうかを確認します(何も割り当てていなくても空の文字列に初期化する文字列クラスを使用しているため)。 ところで、std :: stringをc-stringに変換する最良の方法は、文字列クラスのc_str()メソッドを使用することですが、問題は解決しません。

関連する問題