2015-06-09 7 views
1

Я пытаюсь сделать программу, которая преобразует имя хоста в DNS-имя.Как преобразовать имя хоста в DNS-имя?

Так что, если у меня есть www.google.com Я хочу, чтобы преобразовать его в 3www6google3com0

Я пытался с этим кодом, но он не работает. Может ли кто-нибудь сказать мне, что я делаю неправильно?

int main() 
{ 
unsigned char *a,niz[65536]; 
unsigned char host[]="www.google.ba"; 
a=(unsigned char*)&niz[12]; 
int lock = 0 , i; 
    strcat((char*)host,"."); 

    for(i = 0 ; i < strlen((char*)host) ; i++) 
    { 
     if(host[i]=='.') 
     { 
      *a++ = i-lock; 
      for(;lock<i;lock++) 
      { 
       *a++=host[lock]; 
      } 
      lock++; 
     } 
    } 
    *a++='\0'; 
printf("%s\n",a); 
return 0; 

Когда я пытаюсь распечатать его в терминале, я вижу пустое место.

+0

'strcat ((char *) host,". ");' '' '' Host' имеет только 14 байтов (13 для вашей строки и 1 для нулевого терминатора), поэтому вы вызываете неопределенное поведение здесь (запись через выделенный буфер). – szczurcio

+0

Я был бы очень признателен, если бы вы могли объяснить мне немного больше, что вы пытаетесь сказать. Спасибо – HardRock

+0

Вы создаете массив 'unsigned char' (который не нужен BTW, для регулярных строк просто используйте' char') и инициализируя его строковым литералом 'www.google.ba'. Используя '[]', вы сообщаете компилятору, что он должен определить размер массива для вас, и он делает именно это: 13 байт для строки и еще один для нулевого терминатора 14 вообще. Затем вы пытаетесь выполнить _append_ в эту строку с помощью 'strcat', но не хватает места (поскольку выделено только 14 байтов). – szczurcio

ответ

1

Вместо unsigned char с использованием char. С помощью таких инструментов, как strtok, tokenize исходная строка. sprintf для преобразования int в строку c-type.

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

int main() 
{ 
    char *a,niz[65536]; 
    char host[]="www.google.ba"; 
    a=(char*)&niz[20]; 

    strcat(a," "); 
    char * token = strtok(host,"."); 
    char buffer[20]; 
    while(token != NULL) 
    { 
     int len= strlen(token); 
     sprintf(buffer,"%d",len); 
     strcat(a,token); 
     strcat(a,buffer); 

     token=strtok(NULL,"."); 
    } 
    *a++='\0'; 
    printf("%s\n",a); 
    return 0; 
} 

O/P www3google6ba2

Edit:

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

int main() 
{ 
    char *a,niz[65536]; 
    char host[]="www.google.ba"; 
    a=(char*)&niz[21]; 

    strcat(a," "); 
    char * token = strtok(host,"."); 
    char buffer[20]; 
    while(token != NULL) 
    { 
     int len= strlen(token); 
     sprintf(buffer,"%d",len); 
     strcat(a,token); 
     strcat(a,buffer); 

     token=strtok(NULL,"."); 
    } 

    *a++='\0'; 
    int last_len=strlen(a); 
    a[last_len-1]='0'; 
    printf("%s\n",a); 
    return 0; 
} 

O/P www3google6ba0

Edit: 3 Это намек, чтобы решить вашу проблему :

#include<stdio.h> 
int main() 
{ 

    char c='0'; 
    printf("%d\n",c); 

    c='3'; 
    printf("%d\n",c); 

    c='3'; 
    printf("%d\n",c-'0'); 

} 
+0

Я программирую на C, и я использую Ubuntu с gcc-компилятором, и он говорит cstring: ** Нет такого файла или каталога ** – HardRock

+0

@Lolipop Я скорректировал файлы заголовков, пожалуйста, попробуйте – Steephen

+0

Он работает благодаря вам так много, что помог мне. – HardRock

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