-3

私はc ++でコーディングしていますが、本当に単純なものです。

using namespace std;

int main(){
    char cName[30], cFirst[15], cSur[30];


    cout << "Enter your name: " << endl;
    cin.getline(cName, 29);


    for( int i = 0; i < 29; i++)
      if(cName[i] == ' ')
       break;

    strncpy(cFirst, cName, i);


    cFirst[i] = '\0';
    strncpy(cSur,cName + i + 1);
    cSur[i] = '\0';
    cout << cSur << endl;
    return 0;
}

ただし、プログラムは でコンパイルを停止し、strncpy(cFirst, cName, i);「関数 'char* strncpy(char*, const char*, size_t)' への引数が少なすぎます」というエラー メッセージが表示されます。誰かが私が間違っていることを説明してもらえますか?

4

3 に答える 3

8

strncpy()3 つの引数を取りますが、2 番目の呼び出しでは 2 つだけが提供されます。

strncpy(cSur,cName + i + 1);

これは C++ であるため、 (または)std::stringの代わりに使用することを検討してください。を引数として取り、それを設定するバージョンがあり、固定長配列の必要性がなくなります。次に、 andを使用して、行を名と姓に分割できます。char[]char*std::getline()std::stringstd::string::find()std::string::substr()

std::string full_name("john prog rammer");

const size_t first_space_idx =  full_name.find(' ');
if (std::string::npos != first_space_idx)
{
    const std::string first_name(full_name.substr(0, first_space_idx));
    const std::string surname(full_name.substr(first_space_idx + 1));
}
于 2012-05-29T10:56:13.623 に答える
4

あなたが私に尋ねると、3つではなく2つの引数のみを提供することを意味します:

strncpy(cSur,cName + i + 1);
于 2012-05-29T10:56:18.077 に答える
2

3 つの引数を受け取ると不平を言っていますが、3 つを指定していません。

それはこの行でしょうか:

strncpy(cSur,cName + i + 1);

ここでは、i と 1 を cName に追加しているため、2 のみを指定しています。

于 2012-05-29T10:57:27.597 に答える