как вернуть массив символов из функции в C

Я хочу вернуть массив символов из функции. Затем я хочу напечатать его в main . как я могу получить массив символов в main функции?

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

Скажите, пожалуйста, что я делаю неправильно?

 #include #include #include 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 в #include #include #include 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 

Это скомпилируется без предупреждения

  1. #include stdlib.h
  2. pass test=substring(i,j,s) ;
  3. удалить m поскольку он не используется
  4. либо объявить char substring(int i,int j,char *ch) или определить его перед основным

Даниэль прав: http://ideone.com/kgbo1C#view_edit_box

+ Изменить

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

в

 test=substring(i,j,s); 

Кроме того, вам нужно переслать declare substring:

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

Ленивые заметки в комментариях.

 #include  // for malloc #include  // 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 в #include  // for malloc #include  // 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