【问题标题】:Use of the "-=" operator with array element in C在 C 中使用带有数组元素的“-=”运算符
【发布时间】: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


【解决方案1】:

声明

 S1[6] -= S1[6];

可以读作

S1[6] = S1[6] - S1[6];

所以基本上,它是减去数组实例本身的值,从而得到第 7 个。元素为 0。

但是,这不会改变数组中任何其他元素的值(不像你提到的“第 7 个字符及以后..”),它只是使第 7 个元素的值成为0,即string 的终止空字符。因此,修改后,当您将数组传递给需要字符串的函数时,直到空终止符才可见

【讨论】:

  • 所以它基本上意味着使第7个元素等为零?
  • 不,x = x - x 只是表达x = 0 的一种复杂方式。我会解雇这样的程序员。
  • @IDK 没有。如前所述,只有第 7 个元素将为 0。但 0 表示“字符串结尾”,因此在字符串处理时甚至不考虑以下元素。
  • @IDK 不是这样,只有第 7 个元素。
【解决方案2】:
S1[6] -= S1[6];

等于

S1[6] = S1[6] - S1[6];

也等价于

S1[6] = 0;

或在上下文中更好

S1[6] = '\0';

S1[6],数组S17th 元素与'W' 字符的值相减,结果,实际上是0,被分配回7th 数组元素。

它使字符串的7th 元素成为空字符,从而终止字符串,尽管7th 元素之后的所有字符都不会被覆盖/删除。

这样的效果是,您的程序的输出将是 "Hello " 而不是 "Hello World"

【讨论】:

  • 感谢有用的评论,我不知道他们为什么写这样的代码而不是等于 0。
  • 可以作为抄袭指标。如果有人窃取了此类来源,则很容易识别。
  • @MartinJames :-)
【解决方案3】:

如这行代码 S1[6] -= S1[6];将产生零,因此当您执行代码以打印 hello 字串时,它将从开始打印到空终止符,因此它将仅打印前 5 个字符

【讨论】:

    猜你喜欢
    • 2014-01-19
    • 2019-06-05
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多