C中的子字符串(数组中剩余的子字符串将发生什么情况)
我已经给了一个任务,为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
#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。