2016-01-21 9 views
0

Мне нужно было кодировать мой класс. Кодирование касается запроса пользователя ввести имя, возраст и идентификатор. Затем программа должна использовать код доступа на основе первых 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 . . . 
+0

Вы не должны использовать, чтобы читать строку из stdin. Используйте функции, такие как fgets() или getline() –

ответ

3

Код доступа имеет 22 символов

И все же вы выделили буфер 10 символов для пароля

passcode[10] 

Вы не являетесь нулевым завершающим кодом доступа. Примечание от strncpy

Никакой символ-символ неявно добавляется в конце адресата, если источник длиннее num. Таким образом, в этом случае пункт назначения не считается нисходящей строкой C (чтение ее как таковой будет переполняться).

Заметим также, что линии

x = strlen(passcode); 

действует на код доступа до его инициализации. Таким образом, он будет содержать случайные биты, что делает значение x недостаточно определенным. В настоящее время вы не используете x, поэтому это напрямую не затрагивает проблему.

+0

Рассмотрите возможность использования fgets вместо gets, поскольку он принимает максимальную длину в качестве параметра - http://stackoverflow.com/questions/4346598/gets-function-in-c –

+0

@ ericJ, так что я делаю, чтобы запустить мой код? – NewBie

+0

Итак, после редактирования моих кодов: Здесь – NewBie