我的输出有一些奇怪的符号显示

时间:2016-01-21 18:12:54

标签: c strcat strncpy

我必须为我的班级编码。编码是关于要求用户键入他们的姓名,年龄和身份。然后程序应该根据他们名字中的前6个字母,他们的年龄和他们的学生ID中的前两个字母的密码。问题是输出中有一个未识别的符号(╠╠╠╠╠╠╠╠╠╠╠╠╠╠)。任何人都可以告诉我为什么它在那里>?然后它应该计算并显示密码的长度。这是代码:

#include <stdio.h>
#include <string.h>
void main(void)
{
char name[20], id[9], age[3], passcode[10];
int x;


puts("Enter your name:\n");
gets(name);

puts("\nEnter your student id:\n");
gets(id);

puts("\nEnter your age:\n");
gets(age);

x = strlen(passcode);

strncpy(passcode, name, 6);
strncat(passcode, id, 2);

printf("The passcode is:%s \n",passcode);
printf("The passcode has %d characters..\n",x);

}

它看起来像:

Enter your name:

johnny

Enter your student id:

dc87671

Enter your age:

20
The passcode is:johnny╠╠╠╠╠╠╠╠╠╠╠╠╠╠20dc
The passcode has 22 characters..
Press any key to continue . . .

1 个答案:

答案 0 :(得分:3)

  

密码有22个字符

然而你为密码分配了10个字符的缓冲区

passcode[10]

您不是null终止密码。来自strncpy

的提示
  

如果source长于num,则不会在目标末尾隐式附加空字符。因此,在这种情况下,destination不应被视为空终止的C字符串(读取它会溢出)。

另请注意该行

x = strlen(passcode);

在初始化之前对密码起作用。因此,它将包含随机位,使得x的值没有很好地定义。您目前不使用x,因此不会直接影响手头的问题。