I am a beginner in C programming and I built a function that recieves the string "HodHasharon,frozenYogurt,100"
. The function cuts the string into 3 pieces where every piece is a field of my City
struct.
I want to put "HodHasharon"
into
City pcity.name
(name of the city), "frozenYogurt"
into pcity.popularFood
(popular food) and number of residents (100
) into pcity.residents
.
When i am debugging the output in my function the output is correct but when i print from the main.c
I got a concatenated string.
For example, when I print pcity.name
I get "HodHashafrozenYod"
instead of "HodHasharon"
but if I do printf at my function printf->name I get the correct output of "HodHasharon"
What am I doing wrong?
struct of City:
typedef struct City
{
char *name;
char * popluarFood;
int numberOfPeople;
} City;
the function:
City * cutCityData (char *singleLine)
{
City* pcity=(City*)malloc(sizeof(City));
int firstIndex=1;
int endIndex=1;
int checkItarion=0;
while(endIndex<strlen(singleLine))
{//while
while (singleLine[endIndex] != ',')
{//while2
endIndex++;
}//while2
checkItarion++;
char cityDetails[endIndex - firstIndex +1];
memcpy(cityDetails,&singleLine[firstIndex], endIndex);
cityDetails[endIndex - firstIndex] = '\0';
if (checkItarion == 1) {
pcity->name = (char *) malloc(cityDetails);
strcpy(&(pcity->name), cityDetails);
endIndex++;
firstIndex = endIndex;
}
if (checkItarion == 2) {
pcity->popluarFood = (char *) malloc(cityDetails);
strcpy(&(pcity->popluarFood), cityDetails);
endIndex++;
firstIndex=endIndex;
break;
}
}//while
char cityDetails[strlen(singleLine) - firstIndex + 1];
memcpy(cityDetails, &singleLine[firstIndex], sizeof(singleLine-1));
int resdints=atoi(cityDetails);
pcity->numberOfPeople=resdints;
return pcity;
}
from main:
City* pCity=cutCityData(singLine);
printf("%s\n", &(pCity->name));