请参阅以下程序:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
main(void){
printf("Array concatenateor\n-------------------------\n");
//declarations
char s1[50],s2[50],s3[50];
short int n=0;
//Array initialisation
printf("Array 1: ");
gets(s1);
printf("Array 2: ");
gets(s2);
strcpy(s3, s1); //asure initial form of s1 in s3
strcat(s1, s2); //concatenate s1 with s2
//at this point s1 is in the concatenation form and s3 is s1's initial form
printf("Arrays concatenated with STRCPY: \"%s\"\n", s1); //print concatenation, s3 ok
printf("Number of characters to concatenate: "); //scan number, s3 ok
scanf("%d",&n); //beyond this point s3 becomes null... peculiar
printf("S3: %s\n",s3); //this is the proof of s3 being null
strncat(s3,s2,n); //s3 concatenates with n chars of s2
printf("Arrays concatenated with STRNCAT(%d chars): %s\n", n, s3); //print s3
system("PAUSE");
return 0;
}
奇怪的是,特定的 scanf 如何在没有暗示的情况下擦除 s3 数组。怎么会这样?