C: ???добавляется в мои строки за пределами sizeof (строка) - PullRequest
0 голосов
/ 19 февраля 2019

Я работаю с простой программой шифрования, которая берет пароль и разбивает его для выполнения некоторых математических операций.

Я замечаю, что когда я повторяю разделенный пароль, появляется дополнительный «???»добавляются в конец.

Я проверил sizeof () разделенных строк, и для этого не осталось дополнительного места, которое я могу видеть.Размер переменных разделенных паролей символов не должен допускать этого.

Что вызывает это?

это вызов функции внутри функции main ()

Допустим, я ввожу «читать»

char pass[25];
printf("Enter Pass. Max 25 characters \n");
scanf("%s", pass);
encrypt(pass);

код

void encrypt(char *pass) {      
  int length = strlen(pass);    
  int half = length/2;      
  char half1[half];     
  char half2[half];

  for (int i = 0; i < half; ++i) {       
    half1[i] = pass[i];         
    half2[i] = pass[(half + i)];    
  }

   printf("\n%s\n", half1);      
   printf("%s\n", half2);   
   printf("%d\n", length);  
   printf("%d\n", half);
   printf("%d\n", sizeof(half1));


}

Выход

re???
ad???
4
2
2

1 Ответ

0 голосов
/ 19 февраля 2019

Строки в C должны заканчиваться NUL.Вам нужно выделить дополнительный символ и заполнить его 0, чтобы C распознал их конец, или вы прочтете его конец и, вероятно, получите мусор (если вам повезет).

Такжеобратите внимание, что деление округляется.Если у вас есть 5 символов, половина из них составляет 2;2 * 2 равно 4, поэтому один персонаж теряется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...