2013-05-08 73 views
9

Tôi muốn trả về một mảng ký tự từ một hàm. Sau đó, tôi muốn in nó trong main. làm thế nào tôi có thể lấy lại mảng ký tự trong hàm main?cách trả về mảng char từ một hàm trong 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; 
} 

Hãy cho tôi biết tôi đang làm gì sai?

+0

nào bạn nhận được bất kỳ lỗi nào ?? –

+3

Trình biên dịch của bạn nên đã nói với bạn rằng 'test = substring (i, j, * s);' bạn đang dereferencing 's' khi bạn không nên. –

+0

Tôi nhận được thông báo lỗi: các loại xung đột cho 'chuỗi con' – sayan

Trả lời

4

Daniel là đúng: http://ideone.com/kgbo1C#view_edit_box

Thay đổi

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

để

test=substring(i,j,s); 

Ngoài ra, bạn cần phải chuyển tiếp tuyên bố chuỗi:

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

int main // ... 
+0

im nhận kết quả phù hợp với mảng kiểu số nguyên. Nhưng khi im cố gắng cùng với một mảng char im nhận được lỗi chỉ – sayan

+0

Tôi đã thay đổi mã cho phù hợp nhưng chưa nhận được cùng một lỗi ... – sayan

3

lưu ý Lazy trong nhận xét.

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

này sẽ biên dịch tốt mà không có bất kỳ cảnh báo

  1. #include stdlib.h
  2. qua test=substring(i,j,s);
  3. loại bỏ m vì nó là không sử dụng
  4. hoặc tuyên bố char substring(int i,int j,char *ch) hoặc xác định nó trước khi chính
+0

nó sẽ biên dịch tốt mà không có bất kỳ cảnh báo //1.>bao gồm stdlib.h //2.>pass test = substring (i, j, s); //3.>xóa m vì nó không được sử dụng //4.> hoặc khai báo chuỗi con char (int i, int j, char * ch) hoặc xác định nó trước khi chính –

+0

thực sự hữu ích. – MELWIN

+0

chào mừng! :-) @MELWIN –

Các vấn đề liên quan