2013-05-08 22 views
9

Chcę zwrócić tablicę znaków z funkcji. Następnie chcę wydrukować go w main. Jak mogę odzyskać tablicę znaków w funkcji main?sposób zwracania tablicy znaków z funkcji w C

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    int i=0,j=2; 
    char s[]="String"; 
    char *test; 

    test=substring(i,j,*s); 
    printf("%s",test); 
    return 0; 
} 


char *substring(int i,int j,char *ch) 
{ 
    int m,n,k=0; 
    char *ch1; 
    ch1=(char*)malloc((j-i+1)*1); 
    n=j-i+1; 

    while(k<n) 
    { 
     ch1[k]=ch[i]; 
     i++;k++; 
    } 

    return (char *)ch1; 
} 

Proszę powiedzieć, co robię źle?

+0

nie masz żadnych błędów ?? –

+3

Twój kompilator powinien był ci powiedzieć, że 'test = substring (i, j, * s);' wyłączyłeś '' ', gdy nie powinieneś. –

+0

Otrzymuję komunikat o błędzie: typy powodujące konflikt dla 'podłańcuchów' – sayan

Odpowiedz

4

Daniel ma rację: http://ideone.com/kgbo1C#view_edit_box

Zmień

test=substring(i,j,*s); 

do

test=substring(i,j,s); 

Również trzeba przekazać zadeklarować podciąg:

char *substring(int i,int j,char *ch); 

int main // ... 
+0

im uzyskanie prawidłowego wyniku dla tablicy typu integer. Ale gdy im próbuję tego samego z tablicą znaków, otrzymuję błąd tylko – sayan

+0

Zmieniłem kod odpowiednio, ale otrzymuję ten sam błąd ... – sayan

3

Lazy notatka s w komentarzach.

#include <stdio.h> 
// for malloc 
#include <stdlib.h> 

// you need the prototype 
char *substring(int i,int j,char *ch); 


int main(void /* std compliance */) 
{ 
    int i=0,j=2; 
    char s[]="String"; 
    char *test; 
    // s points to the first char, S 
    // *s "is" the first char, S 
    test=substring(i,j,s); // so s only is ok 
    // if test == NULL, failed, give up 
    printf("%s",test); 
    free(test); // you should free it 
    return 0; 
} 


char *substring(int i,int j,char *ch) 
{ 
    int k=0; 
    // avoid calc same things several time 
    int n = j-i+1; 
    char *ch1; 
    // you can omit casting - and sizeof(char) := 1 
    ch1=malloc(n*sizeof(char)); 
    // if (!ch1) error...; return NULL; 

    // any kind of check missing: 
    // are i, j ok? 
    // is n > 0... ch[i] is "inside" the string?... 
    while(k<n) 
    { 
     ch1[k]=ch[i]; 
     i++;k++; 
    } 

    return ch1; 
} 
7
#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
char *substring(int i,int j,char *ch) 
{ 
    int n,k=0; 
    char *ch1; 
    ch1=(char*)malloc((j-i+1)*1); 
    n=j-i+1; 

    while(k<n) 
    { 
     ch1[k]=ch[i]; 
     i++;k++; 
    } 

    return (char *)ch1; 
} 

int main() 
{ 
    int i=0,j=2; 
    char s[]="String"; 
    char *test; 

    test=substring(i,j,s); 
    printf("%s",test); 
    return 0; 
} 

To będzie skompilować dobrze bez żadnego ostrzeżenia

  1. #include stdlib.h
  2. towarzysza test=substring(i,j,s);
  3. usunąć m jak jest nieużywany
  4. albo zadeklarować char substring(int i,int j,char *ch) lub zdefiniować go przed głównym
+0

będzie on kompilował dobrze bez żadnego ostrzeżenia //1.> include stdlib.h //2.>pass test = substring (i, j, s); //3.> usuń m, ponieważ jest nieużywane //4 .> zadeklaruj char podciągu (int i, int j, char * ch) lub zdefiniuj go przed głównym –

+0

bardzo pomocny. – MELWIN

+0

witamy! :-) @MELWIN –

Powiązane problemy