为什么在引用带有越界索引的字符串时不会产生错误? #包括 void removesting(字符文本[],int beg,int remove) { 整数指数; 对于(index=beg;text[index+remove]!='\0';index++) 文本[索引]=文本[索引+删除]; 文本[索引]='\0'; } 内部主(空) { char text[]=“错误的儿子”; 再投资(文本,3,40); printf(“%s\n”,文本); }

为什么在引用带有越界索引的字符串时不会产生错误? #包括 void removesting(字符文本[],int beg,int remove) { 整数指数; 对于(index=beg;text[index+remove]!='\0';index++) 文本[索引]=文本[索引+删除]; 文本[索引]='\0'; } 内部主(空) { char text[]=“错误的儿子”; 再投资(文本,3,40); printf(“%s\n”,文本); },c,indexing,C,Indexing,C没有任何边界检查。你可以参考任何你喜欢的东西,这取决于你是否有意义 根据平台和其他因素,当代码破坏内存和堆栈时,可能会出现垃圾、内存异常或任何其他随机崩溃。为什么要这样做?谁告诉过你会这样?不定义的行为不需要产生错误。它是未定义的。您可以将该方法重写为strcpy(text+beg,text+beg+remove)代码工作并产生我想要的结果。它不返回垃圾值。可能text+43处的值是可读的零。这就是我在想的,它为什么是可读的零?可能是任何东西。可能还有另一个全局变量。作为字符串常量,text可

C没有任何边界检查。你可以参考任何你喜欢的东西,这取决于你是否有意义


根据平台和其他因素,当代码破坏内存和堆栈时,可能会出现垃圾、内存异常或任何其他随机崩溃。

为什么要这样做?谁告诉过你会这样?不定义的行为不需要产生错误。它是未定义的。您可以将该方法重写为strcpy(text+beg,text+beg+remove)代码工作并产生我想要的结果。它不返回垃圾值。可能text+43处的值是可读的零。这就是我在想的,它为什么是可读的零?可能是任何东西。可能还有另一个全局变量。作为字符串常量,
text
可以与来自错误消息、库常量等的任何其他字符串捆绑在一起。谁知道呢。这就是C语言的本质。有时错误会起作用,直到一些明显不相关的变化。我不相信那是肯定的!
#include <stdio.h>

void removeString(char text[], int beg, int remove)
{
    int index;

    for(index = beg; text[index + remove] != '\0'; index++)
        text[index] = text[index + remove];

    text[index] = '\0';
}

int main(void)
{
    char text [] = "the wrong son";
    removeString(text, 3, 40);
    printf("%s\n", text);
}