2015-05-03 4 views
1

Я пытаюсь прочитать один массив снова и снова в другой большой массив/строку. Что я сделал не так? Я получаю сообщение об ошибке Thread1: signal SIGABRT ??Как читать зацикленную строку в другую большую строку в C

#include <stdio.h> 
void make_nyckel(int size_krypto, char *nyckel); 
int main() 
{ 
    int size_krypto = 15; 
    char nyckel[15]; 
    make_nyckel(size_krypto, nyckel); 
    return 0; 
} 


void make_nyckel(int size_krypto, char *nyckel) 
{ 
    char key[10] = { 'M', 'E', 'K', 'A', 'T', 'R', 'O', 'N', 'I', 'K' }; 
    char i, j; 
    for (j = 0; j<size_krypto; j++)    
    { 
     for (i = 0; i<9; i++)     
     { 
      *nyckel = key[i];     
      nyckel += 1;       
     } 
    } 
} 
+1

'* nyckel клавишу = [я]; nyckel + = 1; 'Это делается' 9 * size_krypto' раз. – BLUEPIXY

+1

Вы не можете поместить 90 символов (или что-то еще) в массив с пробелом для '15' (14, если он предназначен для строки) – pmg

+1

nyckel всего 15 символов, вы пишете 150 символов. Вы превысили выделенное вам пространство – bitspill

ответ

0

Вам не нужен первый for loop, вы можете просто сделать с по модулю операций:

#include <stdio.h> 
void make_nyckel(int size_krypto, char *nyckel); 
int main() 
{ 
int size_krypto = 15; 
char nyckel[16]; 
make_nyckel(size_krypto, nyckel); 
printf("%s",nyckel); 
return 0; 
} 


void make_nyckel(int size_krypto, char *nyckel) 
{ 
char key[11] = { 'M', 'E', 'K', 'A', 'T', 'R', 'O', 'N', 'I', 'K' }; 
int i, j=0; 
// for (j = 0; j<2; j++) 
{ 
    for (i = 0; i<size_krypto; i++) 
    { 
     nyckel[j++] = key[i%10]; 


     // nyckel += 1; 
    } 
} 
} 
1

Не забудьте завершающий NUL байт для nyckel, если он будет использоваться в качестве строки!

void make_nyckel(int size_krypto, char *nyckel) { 
    char key[] = { 'M', 'E', 'K', 'A', 'T', 'R', 'O', 'N', 'I', 'K' }; 
    size_t keylen = sizeof key; /* subtract 1 if key includes a '\0' 
           ** or use strlen(key) */ 

    for (size_t k = 0; k < size_krypto; k++) { 
     nyckel[k] = key[k % keylen]; 
    } 
} 
+0

Большое вам спасибо! Я немного упростил вопрос. Реальная функция намного больше и сложна, но строит то же самое. Вы сделали мой день! –

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