2014-09-20 2 views
0

Я пытался заставить этот код работать, чтобы зашифровать массив указателей *char[] с использованием ROT13-шифрования. Пара проблем:Для инициализации массива нужны фигурные скобки

  1. Программа не компилируется. Ошибка: «текст»: для инициализации массива нужны фигурные скобки.
  2. ROT13, похоже, работает неправильно. Он сохраняет числовое значение кода ASCII, а не его эквивалентную букву.

Вот мой код:

void rot13(int numlines, char * text[]){ 
    //printf("%s\n", text); 
    //char encrypted[length(text)]; 

    for (int i=0; text[i]>='\0'; i++){ 
     if (*text[i]>='A' && *text[i]<='Z'){ 
      *text[i]=(((*text[i]-'A')+13)%26 + 'A'); 
     }else if(*text[i]>='a' && *text[i]<='z'){ 
      *text[i]=(((*text[i]-'a')+13)%26 + 'a'); 
     } 
    } 

    printf ("%d\n ",*text); 
} 

int main(){ 
    char text1[]="parliament"; 
    char * text[]=&text1; 
    rot13(10, text); 
} 
+2

Итак, вы пытались установить фигурные скобки вокруг этой инициализации? (Линия, с которой она имеет проблемы, должна быть 'char * text [] = &text2;') – dyp

+0

@dyp, что такое 'text2'? –

+0

@CoolGuy Опечатка. Разумеется, это должен быть «текст1». – dyp

ответ

2

В char * text[]=&text1;, text объявлен как массив указателей на char. Следовательно, имеет тип массива. Он не может быть инициализирован без использования фигурных скобок (исключение: строковые литералы). Лучше объявить его как указатель на указатель на символ

char **text = &text1; 

Следует отметить, что заявление char * text[] в main и в параметре функции не совпадает. При объявлении как функциональный параметр char * text[] эквивалентен char **text.

+0

@ dyp; Правда. Добавлено это. – haccks

Смежные вопросы