我有这段代码:
int main()
{
const int SZ = 100;
char buf[SZ];
ifstream in("Test1.txt");
ofstream ou("Test2.txt", ios::app);
while (in.getline(buf, SZ)) {
char* cp = buf;
while (*cp != ':')
++cp;
*cp = 0;//<- this line
cp += 2;
ou << cp << ":" << buf << endl;
}
}
Test1.txt看起来像这样:
Smith:00
Richard:01
Johansson:02
程序完成后Test2.txt如下所示:
0:Smith
1:Richard
2:Johansson
我很难理解为什么它看起来像这样,在我用注释标记的代码块中发生了什么,为什么它会改变输出?我知道会发生什么变化它会,但我不明白为什么,有人可以帮忙吗?
答案 0 :(得分:3)
代码是
逐行阅读输入文件(最多SZ
- 每行1个字符)到buf
:
cp
设置为指向buf
的正面,然后向前推进cp
寻找':'
字符':'
字符替换为'\0'
(null)字符,然后将cp
提前过去,然后使用下一个字符('0'
数字)cp
被写为以空字符结尾的字符串,从第2个数字开始,到buf
末尾的空终止符结束。 buf
衰减为char*
指针,因此它也被写为以空字符结尾的字符串,从buf
开始到':'
结束 - 转为{ {1}}字符。