2013-05-08 19 views
9

関数から文字配列を返したいと思います。それから私はmainでそれを印刷したいと思います。文字配列をmainに戻すにはどうしたらいいですか?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; 
} 

私は間違っていると教えてください。

+0

あなたはすべてのエラーを得るのですか前にそれを定義し使用されていないよう

  • mを削除?? –

  • +3

    あなたのコンパイラは 'test = substring(i、j、* s);と言っているはずですが、' s'を参照してはいけません。 –

    +0

    エラーメッセージが表示されます: 'substring'の相反するタイプ – sayan

    答えて

    4

    ダニエルは右である:

    test=substring(i,j,s); 
    

    からhttp://ideone.com/kgbo1C#view_edit_box

    変更

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

    また、あなたが宣言したサブストリングに転送する必要があります。

    char *substring(int i,int j,char *ch); 
    
    int main // ... 
    
    +0

    整数型配列の正しい結果を得るしかし、私は文字配列を同じにしようとしたときにエラー – sayan

    +0

    私はそれに応じてコードを変更しましたが、まだ同じエラーを取得しました... – sayan

    3

    レイジー注意をコメントの中で。

    #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; 
    } 
    

    これは何の警告

    1. #include stdlib.h
    2. パスtest=substring(i,j,s)せずに罰金コンパイルされます。
    3. どちらかがchar substring(int i,int j,char *ch)を宣言するか、メイン
    +0

    それは警告なしで正常にコンパイルされます//1.>include stdlib.h //2.>password =サブストリング(i、j、s); //3.>remove mが未使用であるため、//4.E>メインサブクエリ –

    +0

    が本当に役立つ前に、charサブストリング(int i、int j、char * ch)を宣言してください。 – MELWIN

    +0

    ようこそ!:-) @MELWIN –

    関連する問題