C code behaves differently as a main, as a called function -


i writing program processes users text. first wrote functions different mini-programs consisting of main-func , worked perfectly. assembling code got stuck, because 1 function behaves differently. function used input text user , place dynamically allocated memory. input ends when "end" string entered.

first was:

#include <stdio.h> #include <string.h> #include <stdlib.h>  int main() {   char** text = null;   int i,j,flag=1;   int count_strings;   char c;    for(i=0;flag;i++)   {     text = (char**)realloc(text,sizeof(char*)*(i+1));     *(text+i) = null;     c = 0;     for(j=0;c!='\n';j++)     {       c = getchar();       *(text+i) = (char*)realloc(*(text+i),sizeof(char)*(j+1));       *(*(text+i)+j) = c;     }     *(*(text+i)+j-1) = ' ';     *(*(text+i)+j) = '\0';      if(strcmp(*(text+i),"end ")==0)     {       flag = 0;       free(*(text+i));     }   }   count_strings = i-1;    for(i=0;i<count_strings;i++)   {     printf("%d.%s\n",i,*(text+i));     free(*(text+i));   }   free(text); } 

and worked this:

input: aaaa bbbb cccc dddd eeee end output: 0.aaaa  1.bbbb  2.cccc  3.dddd  4.eeee  

but when tried make callable function started behaving in different way.

char** text_input(int* count_strings) {   char** text = null;   int i,j,flag=1;   char c;    for(i=0;flag;i++)   {     text = (char**)realloc(text,sizeof(char*)*(i+1));     *(text+i) = null;     c = 0;     for(j=0;c!='\n';j++)     {       c = getchar();       *(text+i) = (char*)realloc(*(text+i),sizeof(char)*(j+1));       *(*(text+i)+j) = c;     }     *(*(text+i)+j-1) = ' ';     *(*(text+i)+j) = '\0';      if(strcmp(*(text+i),"end ")==0)     {       flag = 0;       free(*(text+i));     }   }   *count_strings = i-1;   for(i=0;i<*count_strings;i++)     printf("%d.%s\n",i,*(text+i));   return(text); } 

example:

input: aaa bbb ccc ddd eee end output: 0.  1.aaa  2.bbb  3.ccc  4.ddd  5.eee  

if code same, has changed input.

you might have had new line character in input stream before calling function. make sure previous code consumes input before proceeding.


Comments

Popular posts from this blog

python - mat is not a numerical tuple : openCV error -

c# - MSAA finds controls UI Automation doesn't -

wordpress - .htaccess: RewriteRule: bad flag delimiters -