2016-04-09 35 views
-1
int main(void) 
{ 
    int howMany,i,j; 
    char* temp = NULL; 
    char** friends = NULL; 
    printf("Please enter the number of the friends you have\n"); 
    scanf(" %d",&howMany); 
    howMany++; 
    friends = (char**) malloc(sizeof(char*)*howMany); 
    for (i = 0; i < howMany; i++) 
    { 
     temp = (char*) malloc(20*sizeof(char)); 
     fgets(temp,20,stdin); 
     temp[strspn(temp, "\n")] = '\0'; 
     *(friends + i) = (char*)realloc(temp,sizeof(char) * (strlen(temp)+1)); 
    } 

    for (i = 0; i < howMany; i++) 
    { 
     for (j = 0; j < strlen(*(friends+i)); j++) 
     { 
      printf("%c",friends[i][j]); 
     } 
     printf("\n"); 
    } 
    for (i = 0; i < howMany; i++) 
    { 
     free(*(friends + i)); 
    } 

    free(friends); 
    getchar(); 
    return 0; 
} 

benim kod amacım kod neden çalışmadığını herhangi bir fikir, ekrana yazdırmadan nihayet i var arkadaşlar, isimleri miktarını almak ve etmektir?fgets() realloc ile garip davranış()

Girdi: daniel david

Çıktı:

(\ n)

Beklenen çıkışı: daniel david

+1

Nasıl çalışıyor * çalışmıyor *? –

+1

Şaşırtıcıyım @YuHao – ilanDazanashvili

+2

Hayır working nasıl çalıştığını, örneğin girişinizi, beklenen çıkışı, akım çıkışını vb. Açıklayın. –

cevap

3

temel sorun buradadır:

temp[strspn(temp, "\n")] = '\0'; 

Yanlış işlevi kullandınız. strspn değil strcspn olmasını istiyorsunuz. bunu değiştirin: Diğerleri işaret olarak size döngüler içinde özgün değerine ihtiyacımız beri

temp[strcspn(temp, "\n")] = '\0'; 

Ayrıca, sen howMany değerini değiştirmemelidir.

+1

Veya 'strchr (temp, '\ n')' ... –

+0

@Martin R "Veya' strchr (temp, '\ n') '" içerikten yoksundur. Yanlış kullanılan * strchr (temp, '\ n') = '\ 0'; '' hacker'ın istismarının başlangıcıdır. Düzgün kullanmak için: '{char * p = strchr (temp, '\ n'); eğer (p) * p = '\ 0';} ' – chux

İlgili konular