2012-05-04 58 views
0

這是我的代碼:分拆的主成一個功能

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

int main() 
{ 
     char c, *data, *temp; 
     data=malloc(sizeof(char)); 
     int i, conta=0; 
     printf("Write hostname: "); 
     for (i=0;;i++) { 
      c=getchar(); 
      conta++; 
      if (c=='\n') break; /* Se premo invio esco dal ciclo */ 
      data[i]=c; /* Inserisco il carattere nell'array */ 
      temp=realloc(data,(i+2)*sizeof(char)); /* do memoria aggiuntiva al puntatore (+2 per carattere NUL) */ 
      if (temp != NULL) { 
        data=temp; /* Se la riallocazione va a buon fine assegno temp a data */ 
      } else { 
        free(data); /* altrimenti libero il puntatore, stampo messaggio errore e chiudo programma */ 
        printf("Error allocating memory!\n"); 
        return EXIT_FAILURE; 
      }  
     } 
    /* Stampo la stringa letta, libero puntatore e chiudo programma */ 
    for (i=0;i<=conta;i++){ 
      printf("%c", data[i]); 
     } 
     printf("\n"); 
     free(data); 
     return EXIT_SUCCESS; 
} 

我想我的主要分成功能,將讓用戶輸入(主機名,用戶名)。
我想是這樣的:

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

function read_input(); 

int main() 
{ 
    printf("Write hostname: "); 
    read_input(); 
    printf("Write username: "); 
    read_input(); 
    for (i=0;i<=conta;i++){ 
     printf("%c", data[i]); 
    } 
    printf("\n"); 
    free(data); 
    return EXIT_SUCCESS; 
} 

read_input(){ 
.... 
} 

,但我不知道我怎麼也得開始讓這個功能...
我不知道該怎麼做,將返回conta一個功能( for cicle),指針data(必須釋放它並且需要打印輸出)。
我有做一個結構,並將其傳遞給函數的返回?

回答

1

你可以組織你的代碼是這樣的:

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

int read_input(char data[]); 

int main() 
{ 
    char *data; 
    int i, conta; 
    data=malloc(sizeof(char)); 
    printf("Write hostname: "); 
    conta = read_input(data); 
    /* Stampo la stringa letta, libero puntatore e chiudo programma */ 
    for (i=0;i<=conta;i++){ 
     printf("%c", data[i]); 
    } 
    printf("\n"); 
    free(data); 
    return EXIT_SUCCESS; 
} 

int read_input(char data[]) 
{ 
    char c, *temp; 
    int i, conta = 0; 
    for (i=0;;i++) { 
     c=getchar(); 
     conta++; 
     if (c=='\n') break; /* Se premo invio esco dal ciclo */ 
     data[i]=c; /* Inserisco il carattere nell'array */ 
     temp=realloc(data,(i+2)*sizeof(char)); /* do memoria aggiuntiva al puntatore (+2 per carattere NUL) */ 
     if (temp != NULL) { 
       data=temp; /* Se la riallocazione va a buon fine assegno temp a data */ 
     } else { 
       free(data); /* altrimenti libero il puntatore, stampo messaggio errore e chiudo programma */ 
       printf("Error allocating memory!\n"); 
       return EXIT_FAILURE; 
     } 
    } 
    return conta; 
} 
+0

這是不對的。如果realloc()返回一個不同於指定的指針(指向數據),則新指針將不會被main()所看到,該指針仍然保存舊副本。 – wildplasser