C ++:将值(指向)设置为0有什么作用?

时间:2018-01-14 22:07:45

标签: c++ pointers

我有这段代码:

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

我很难理解为什么它看起来像这样,在我用注释标记的代码块中发生了什么,为什么它会改变输出?我知道会发生什么变化它会,但我不明白为什么,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

代码是

  • 逐行阅读输入文件(最多SZ - 每行1个字符)到buf

  • 每行
    • cp设置为指向buf的正面,然后向前推进cp寻找':'字符
    • 找到
    • 后,将':'字符替换为'\0'(null)字符,然后将cp提前过去,然后使用下一个字符('0'数字)
    • 最后将值格式化为输出文件中的一行。 cp被写为以空字符结尾的字符串,从第2个数字开始,到buf末尾的空终止符结束。 buf衰减为char*指针,因此它也被写为以空字符结尾的字符串,从buf开始到':'结束 - 转为{ {1}}字符。