2015-05-29 5 views
1

Мне интересно, что это за ошибка? Я делаю шифр причинщика, и он работает нормально, но когда я печатаю зашифрованное сообщение в конце, он перепечатывает незашифрованное сообщение. Когда я комментирую и устанавливаю сообщение в предложение, он отлично работает. Но когда я получаю строку с помощью fgets, она создает другую копию. Заранее спасибо!fgets() создает другую копию строки во время ввода?

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

int main(int argc, char *argv[]) 
{ 
    char message[100]; 
    printf("Please Enter a message to be Encrypted: "); 
    fgets(message, 100, stdin); 
    unsigned char caeser[] = ""; 
    int j = 0; 
    if(argc >= 2) 
    { 
    int k = atoi(argv[1]); 
    for(int i = 0, n = strlen(message); i < n; i++) 
    { 
     printf("%i\n",n); 
     if(!isspace(message[i])) 
     { 
      if(islower(message[i])) 
      { 
       j = message[i] - 97; 
       caeser[i] = 97 + ((j + k) % 26); 
      } 
      if(isupper(message[i])) 
      { 
       j = message[i] - 65; 
       caeser[i] = 65 + ((j + k) % 26); 
      } 
     } 
     else 
     { 
      caeser[i] = ' '; 
     } 
     } 
    printf("%s\n", caeser); 
    } 
} 
+2

'caeser []' имеет только 1 байт, связанный с ним. Конечно, 'caeser [i] = 97 + ((j + k)% 26);' написал вне этого. – chux

ответ

0

Нет проблем с fgets() здесь. Реальная проблема здесь заключается в том, что вы не правильно определили массив caeser.

Вы должны предоставить размер явно, если вы не инициализировать достаточно инициализаторах на время определения. Массив времени компиляции не будет магически расширяется в зависимости от использования. Вы должны заранее определить размер, указав его явно или инициализируя его достаточным количеством элементов инициализатора.

Вот что-то вроде

unsigned char caeser[100] = {0}; 

будет делать работу за вас.