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's 的内容。如果只是this,你就发现了问题。

于 2013-01-15T11:24:57.560 回答