我正在查看一些如下所示的C ++代码:
char* foo = strchr(sStr, '\t');
if (foo)
{
*foo++ = '\0';
/* more code */
}
我假设不需要更多上下文 - 我理解第一行是初始化指向sStr
中第一次出现的指针。我不完全确定*foo++ = '\0';
正在做什么。
答案 0 :(得分:5)
这一行:
*foo++ = '\0';
将foo
指向的字符设置为值'\0'
(空字符),然后移动指针使其指向下一个字符。它相当于:
*foo = '\0';
foo = foo + 1;
答案 1 :(得分:2)
这是“访问数组元素并前进到下一个数组元素”的标准咒语。它类似于执行foo[i++]
之类的迭代数组。
表达式本身解析为
*(foo++) = '\0';
foo++
表示“递增foo,但在此表达式中使用其当前值”。因此,此表达式将'\0'
分配给char
当前指向的foo
对象,并使foo
前进以指向下一个元素。
答案 2 :(得分:0)
之前的答案是正确的:<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<img id="image" src="http://static.micheljansen.org/uploads/mac-osx-arrow-cursor.png"/>
<div id="drop">
</div>
指向foo
中的标签,因此第sStr
行用NUL替换标签,并将*foo++ = '\0';
前进至指向下一个角色。
您可能会这样做的原因是将一行文本解析为制表符分隔的字段。如果foo
没有这样做(即。,记录指向字段开头的指针,并通过用NUL替换标签来分隔它们,我会感到惊讶。)