当传递给函数时,如何正确地将一个字符数组的内容复制到另一个字符数组,而不使用STL
How to properly copy contents of one char array into another when passed to function, WITHOUT using STL?
我想学习如何将一个字符串的内容复制到另一个字符串中,并且我想确保我对代码的解释是正确的。这个练习的重点是学习,所以我不想使用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。
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 按字符值访问int数组
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 移动二维数组中的字符
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- C++ 带结构的数组字符
- 数组字符包含量超出预期
- 读取文件并添加到数组字符
- 如何在Qt中更改或替换数组字符
- 为什么编译器不在参数中传递数组字符 *arr[] 的大小?
- 井字棋数组字符错误
- 分割数组字符