c++中的可视化strcpy_s

visual strcpy_s in c++

本文关键字:strcpy 可视化 c++      更新时间:2023-10-16

我是c++新手。我正在编写以下简单的代码。我想把字符[40]传递给一个函数,然后得到与输出相同的结果。如果我把一个调试在以下点。strcpy_s (x, 100,测试人员),

但它只需要"This",如果我写"This is sent at output"。谁能指出我错过了什么,为什么只接受几个字符。

// 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;
}

operator>>将停止使用输入的第一个空白字符。另一种选择是使用cin.getline()来防止由于空白而对输入进行处理。

注意初始化数组,避免使用memset():

char x[100] = "";

推荐std::stringstd::getline(),避免指定从输入流读取的最大字符数(避免固定大小数组的潜在缓冲区溢出问题)。

std::cin >> m;更改为cin.getline(m, 39);

cin >> x在输入中有空格(空格,制表符,…)时才获取所有行字符。

由于您使用的是c++,所以最好使用std::string类而不是旧的C风格字符串

std::cin>>m可能由于某种原因在空格上打断了字符串。使用调试器中断并检查m的内容。如果只有this,您就发现问题了。