C中的子字符串(数组中剩余的子字符串将发生什么情况)

C中的子字符串(数组中剩余的子字符串将发生什么情况),c,arrays,C,Arrays,我已经给了一个任务,为C中给定的输入生成一个子字符串 #include<stdio.h> int main(){ char a[1000]; char *sub; int startFrom = 0; int endAt = 0; printf("Enter the String: "); scanf("%s", a); printf("Start From? "); scanf("%d", &startFro

我已经给了一个任务,为C中给定的输入生成一个子字符串

#include<stdio.h>
int main(){
    char a[1000];
    char *sub;
    int startFrom = 0;
    int endAt = 0;

    printf("Enter the String: ");
    scanf("%s", a);
    printf("Start From? ");
    scanf("%d", &startFrom);
    printf("End At? ");
    scanf("%d", &endAt);

    sub = &a[startFrom];
    a[endAt] = '\0';
    printf("%s\n", sub);
    return 0;
}
#包括
int main(){
字符a[1000];
char*sub;
int startFrom=0;
int-endAt=0;
printf(“输入字符串:”);
scanf(“%s”,a);
printf(“从哪里开始?”);
scanf(“%d”,从&startFrom);
printf(“结束于?”);
scanf(“%d”&endAt);
sub=&a[startFrom];
a[endAt]='\0';
printf(“%s\n”,sub);
返回0;
}

但是,代码工作正常,但是数组中的其余字符会发生什么情况

阵列的其余部分保持不变;只是将数组中的一个字符更改为null(“\0”)。因此,如果您尝试访问
a[endAt]
字符之后(或之前)的任何其他字符,您将能够这样做

看看吧


但是,正如您所看到的,当您尝试打印原始数组时,它将只打印到第一个“\0”字符。

它们仍然在那里,而不是您用该终止符重写的字符(假设您的输入是正常的)。使用scanf(“%999s”,a);或fgets(a、100、stdin);切勿无限制地使用扫描%s。