2017-02-07 9 views
0

Как видно из названия, я не знаю, где моя ошибка с двоичным.ПОЧЕМУ В этом случае сбой кода при использовании с биндом?

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

char binary[360]; 

void printstringasbinary(char* s) 
{ 
    // A small 9 characters buffer we use to perform the conversion 
    char output[9]; 

    while (*s) 
    { 
     // Convert the first character of the string to binary using itoa. 
     // Characters in c are just 8 bit integers, at least, in noawdays computers. 

     itoa(*s, output, 2); 

     strcat(binary, output); 

     ++s; 
    } 

} 

int main(int argc, char *argv[]) 
{ 

    int i, n; 

    //printf("argc: %i\n", argc); 
    if (argc != 3) 
    { 
     puts("Converter [Text] [hex|dec|bin]"); 
     return 0; 
    } 
    FILE *f = fopen("Output.txt", "a"); 
    for (i = 0; i < strlen(argv[0]); i++) 
    { 
     if (strcmp(argv[2], "hex") == 0) 
      fprintf(f, "%X ", (unsigned int) argv[1][i]); 
     else if (strcmp(argv[2], "dec") == 0) 
      fprintf(f, "%i ", (unsigned int) argv[1][i]); 
     else if (strcmp(argv[2], "bin") == 0) 
      for (n = 0; n < strlen(argv[1]); n++) 
      { 
       printstringasbinary(argv[1][i]); 
      } 
     fprintf(f, "%s ", binary); 

    } 
    fclose(f); 

    return 0; 
} 
+0

Оставьте свой код, не публикуйте его! – LPs

+0

Пожалуйста, посетите раздел [как спросить] (http://stackoverflow.com/help/how-to-ask) справочного центра. Вопросы должны быть полностью автономными. – StoryTeller

+1

'printstringasbinary (argv [1] [i]);' ---> 'printstringasbinary (argv [1]);' – LPs

ответ

1

Вы перебирать персонажей argv[1][i], в то время как i может принимать значения до длины строки из argv[0]. В зависимости от того, является ли argv[0] «длиннее», чем argv[1], это может привести к ошибке seg. Возможно, вы имели в виду printstringasbinary(argv[1][n]) вместо printstringasbinary(argv[1][i])? Кстати: почему - как указано в LPs - вы итерации через argv[1]?

for (i = 0; i < strlen(argv[0]); i++) 
.... 

     for (n = 0; n < strlen(argv[1]); n++) 
     { 
      printstringasbinary(argv[1][n]); 
     }