【发布时间】:2011-10-11 07:55:34
【问题描述】:
查看以下程序:
#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 数组。这是怎么回事?
【问题讨论】:
-
请用更准确的术语。数组不会“变为空”; null 是指针的状态,数组的内存仍然存在。发生的事情是缓冲区现在似乎包含一个空字符串,即它的第一个字符已设置为 '\0'。 (ASCII NUL 或“空字节”
'\0'不应与NULL指针值混淆。)
标签: c string scanf erase strcat