C语言 我的输出显示了一些奇怪的符号



我不得不为我的班级编码。编码是关于要求用户输入他们的姓名,年龄和ID。然后,程序应根据其姓名中的前6个字母,年龄和学生证中的前两个字母来输入密码。问题是输出中未识别的符号 (╠╠╠╠╠╠╠╠╠╠╠╠╠ )。谁能告诉我为什么它在那里>?然后它应该计算并显示密码的长度。这是代码:

#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 . . .

密码包含 22 个字符

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

passcode[10]

您不是空终止密码。 来自 strncpy 的说明

如果源长度超过 num,则不会在目标末尾隐式附加空字符。因此,在这种情况下,不应将目标视为以空结尾的 C 字符串(这样读取它会溢出)。

另请注意,该行

x = strlen(passcode);

在初始化密码之前对密码进行操作。因此,它将包含随机位,导致 x 的值未明确定义。您目前不使用 x,因此它不会直接影响手头的问题。

相关内容

  • 没有找到相关文章

最新更新