如何删除 C 中奇怪的字符错误?

How to remove weird character error in C?

所以在最后一个 printf 中,我想使用 fgets 从用户输入中获取前 2 个字符。我这样做了,但这些 2 位数字输出似乎有问题。最后一个词中有一个意想不到的字符,我该如何删除它? 我使用代码块 C Languange 和 GNU GCC 编译器。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
 char nama[20],alamat[30],kota[20],jenis_kelamin[2];
 char nama2[4],alamat2[4],kota2[4];
 int nomor;

 printf("Enter your name                                   = ");
 fgets(nama,20,stdin);
 printf("Nama                                              = %s\n",nama);

 printf("Enter your address                                = ");
 fgets(alamat,30,stdin);
 printf("Alamat                                            = %s\n",alamat);

printf("Enter your city name                               = ");
fgets(kota,20,stdin);
printf("Kota                                              = %s\n",kota);

printf("Masukkan Jenis Kelamin Anda Dengan Huruf L atau P = ");
fgets(jenis_kelamin,2,stdin);
printf("Kelamin                                           = %s\n",jenis_kelamin);

printf("\nMasukkan Nomor NIM                                = ");
scanf("%d",&nomor);
printf("Nomor                                             = %d\n",nomor);

//strncpy(nama2,nama,2);
//strncpy(alamat2,alamat,2);
//strncpy(kota2,kota,2);

printf("\n*******************************************************\n");
printf(" Your name is                   * %s",nama);
printf(" Your address is                * %s",alamat);
printf(" Your cith name is              * %s",kota);
printf(" Jenis Kelamin anda adalah      * %s\n",jenis_kelamin);
printf(" Nomor NIM anda adalah          * %d ",nomor);
printf("\n*******************************************************\n");

strncpy(nama2,nama,2);
fflush(stdin);
strncpy(alamat2,alamat,2);
fflush(stdin);
strncpy(kota2,kota,2);

printf(" 2 First Character of your Name* %s\n",nama2);
printf(" 2 First Character of your Address* %s\n",alamat2);
printf(" 2 First Character of your City* %s",kota2);
printf("\n*******************************************************\n");

return 0;

}

然而,当我 运行 这输出不是我所期望的:

*******************************************************
Your name is                   * Mark
Your address is                * GPA
Your city name is              * New York
Jenis Kelamin anda adalah      * L
Nomor NIM anda adalah          * 13
******************************************************
2 First Character of your Name          * Ma√⌂L
2 First Character of your Address       * GPå¬Ma√⌂L
2 First Character of your City          * Ne
*******************************************************

姓名和城市的最后一个字有一个奇怪的字符。比如å¬Ma√⌂L和√⌂L

应该是这样的:

******************************************************
2 First Character of your Name          * Ma
2 First Character of your Address       * GP
2 First Character of your City          * Ne
*******************************************************

如何解决这个问题?我错过了什么?谢谢。

您没有复制零终止符。 strncpy 字符串长度超过限制时不复制。

strncpy(alamat2,alamat,2);
alamat2[2] = '[=10=]';
// etc...

假设 fflush(stdin); 无效。不要使用它。