【发布时间】:2020-09-27 06:54:23
【问题描述】:
以下代码从字符串中删除了第 7 个字符及之后的字符,我发现了这一点,但谁能解释一下数组的一般逻辑和S1[6] -= S1[6]; 之类的操作。我搜索了数组算术,但它与地址算术和指针有关。感谢您的帮助。
#include <string.h>
int main()
{
char S1[]= "Hello World";
S1[6] -= S1[6];
printf("%s",S1);
}
【问题讨论】:
-
它只是将该字符设置为
0所以printf停止在那里打印。如果您想实际删除,即完全删除一个字符,那么您需要将所有字符向左移动一个,包括0终止符。尽管如此,数组仍将具有相同的大小。如果数组也必须调整大小,那么它必须是动态分配的,而不是像现在这样在堆栈上,所以你可以realloc将它的大小调整为更小的大小(所有必要的检查)。运算符-=从左侧减去右侧,然后将结果分配回左侧。所以,a -= b;等价于a = a - b; -
-=运算符与数组无关。S1[6] -= S1[6]是S1[6] = 0的非常糟糕的 C 代码。
标签: c arrays string operators arithmetic-expressions