下面的代码从字符串中删除了第7个字符,但我无法弄清楚,但有人可以向我阐明数组和S1[6] -= S1[6];
等操作的一般逻辑。我搜索了数组算术,但它与地址算术和指针有关。感谢您的帮助。
#include <string.h>
int main()
{
char S1[]= "Hello World";
S1[6] -= S1[6];
printf("%s",S1);
}
S1[6] -= S1[6];
等于
S1[6] = S1[6] - S1[6];
也等同于
S1[6] = 0;
或更好的上下文
S1[6] = '\0';
S1[6]
,将数组7
的第S1
个元素与'W'
字符的值相减,其结果实际上是0
,被分配回第7
个数组元素。
[尽管第7
个元素之后的所有字符都不会被覆盖/擦除,但它使字符串的第7
个元素为空字符,该字符终止了字符串。
这会导致程序的输出将是"Hello "
而不是"Hello World"
。
声明
S1[6] -= S1[6];
可以读为
S1[6] = S1[6] - S1[6];
因此,基本上,它减去数组实例本身的值,从而得出第七。元素为0。
但是,这不会更改数组中任何其他元素的值(不像您提到的“第7个字符及以后的字符..”),它只是将第7个元素的值设为0
,即终止string
作为这行代码S1 [6]-= S1 [6];将产生零,因此当您执行代码以打印问候字串时,它将从头开始打印,直到空终止符为止,因此仅打印前5个字符