当传递给函数时,如何正确地将一个字符数组的内容复制到另一个字符数组,而不使用STL

How to properly copy contents of one char array into another when passed to function, WITHOUT using STL?

本文关键字:数组 字符 复制 另一个 STL 一个 函数 正确地      更新时间:2023-10-16

我想学习如何将一个字符串的内容复制到另一个字符串中,并且我想确保我对代码的解释是正确的。这个练习的重点是学习,所以我不想使用STL实现——我想自己学习算法。

我有一个名为CStudent的类,它包含一个名为szName的私有成员变量。

在我的Main.cpp中,我有一些代码使用getLine读取一行数据,并使用自定义substr函数提取一定数量的字符。

我想将szName的内容设置为substr函数的结果,但是到目前为止,我尝试的每个实现都只会复制一个字符。

下面是代码的相关部分:

class CStudent
{
public:
    void setName(char inName[]);
    void setClass(char inClass[]);
    void setGPA(float inFloat);
    char getName();
    char getClass();
    float getGPA();
private:
    char szName[20] = {};
    char szClass[10] = {};
    float fGPA{ -1.0f };
};
// Custom strcpy to enable use of setters in class
void strcpy(char inString[], char outString[], size_t outSize)
{
    unsigned int i = 0;
    for (; ((inString[i] != '') && (i < (outSize))); i++)
    {
        outString[i] = inString[i];
    }
    outString[i] = '';
}
void CStudent::setName(char inName[])
{
    strcpy(inName, szName, 20);
}
// Custom substr to enable use of setters in class
void substr(char inString[], char outString[], size_t outSize, int startPos, int endPos)
{
    int inStringPos = 0, outStringPos = 0;
    //for (inStringPos = startPos, outStringPos = 0; outStringPos < outSize;)
    for (inStringPos = startPos, outStringPos = 0; inStringPos < endPos;)
    {
        outString[outStringPos++] = inString[inStringPos++];
    }
    outString[outStringPos] = '';
}

主要摘录:

int main()
{
    CStudent students[25]{};
    CStudent freshmen[25]{};
    CStudent sophomores[25]{};
    CStudent juniors[25]{};
    CStudent seniors[25]{};
    // Read in data
    fstream inputFile;
    inputFile.open("input.txt");
    for (int i = 0; i < 25; i++)
    {
        char readLine[80] {};
        inputFile.getline(readLine, 80);
        char sName[20] {};
        substr(readLine, sName, 20, 0, 19);  // Only reading first character
        students[i].setName(sName);
        char sClass[10] {};
        substr(readLine, sClass, 10, 20, 29);
        students[i].setClass(sClass);

我哪里错了?

我阅读了strcpy的实现,我在几个地方找到了,我似乎不知道我哪里出错了。

编辑:在代码注释中,我提到它的substr只返回1个字符,但它实际上是setter - setName.

我错误地将getName的返回类型设置为char而不是char*,它正确地只返回数组的第一个字符。谢谢@IgorTandetnik。