2

私はC++を初めて使用します。私は次の簡単なコードを書いています。文字[40]を関数に渡して、出力と同じものを取得したかったのです。次の時点でデバッグを行った場合。strcpy_s(x、100、tester);

しかし、「これは出力で送信されます」と書いた場合にのみ「これ」が必要です。誰かが私が欠けているものと、少数の文字しか受け入れない理由を指摘できますか?

// BUSTesting.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include "resource.h"

int testFunction(char* tester);
int _tmain()
{

    char m[40];
    std::cin>>m;
    testFunction(m);
}
int testFunction(char* tester)
{

    char x[100] ;
    memset(x,100,sizeof(x));
    strcpy_s(x,100,tester);
    std::cout<<x;
    return 0;
}
4

3 に答える 3

8

operator>>最初の空白文字で入力の消費を停止します。cin.getline()別の方法は、空白による入力の処理を防ぐために使用することです。

配列を初期化して回避することに注意してくださいmemset()

char x[100] = "";

入力ストリームから読み取る最大文字数を指定しないようにすることをお勧めstd::stringstd::getline()ます(固定サイズの配列で発生する可能性のあるバッファオーバーランの問題を回避します)。

于 2013-01-15T11:26:17.517 に答える
3

これを変更します:std::cin >> m;これにcin.getline(m, 39);

cin >> x入力に空白(スペース、タブ、...)がある場合、終了行まですべての行文字を取得しません。

C ++を使用しているためstd::string、古いCスタイルの文字列ではなくクラスを使用することをお勧めします。

于 2013-01-15T11:28:53.473 に答える
2

std::cin>>mおそらく何らかの理由でスペースの文字列を壊します。デバッガーで中断し、mの内容を確認します。それだけの場合thisは、問題が見つかりました。

于 2013-01-15T11:24:57.560 に答える