Я новичок в программировании на C, и я создал функцию, которая получает строку "HodHasharon,frozenYogurt,100"
.Функция разрезает строку на 3 части, где каждая часть является полем моей City
структуры.
Я хочу поместить "HodHasharon"
в Город pcity.name
(название города), "frozenYogurt"
вpcity.popularFood
(популярная еда) и количество жителей (100
) в pcity.residents
.
Когда я отлаживаю вывод в моей функции, вывод правильный, но когда я печатаю из main.c
Iполучил объединенную строку.
Например, когда я печатаю pcity.name
, я получаю "HodHashafrozenYod"
вместо "HodHasharon"
, но если я выполняю printf в своей функции printf-> name, я получаю правильный вывод "HodHasharon"
Что я делаю не так?
структура города:
typedef struct City
{
char *name;
char * popluarFood;
int numberOfPeople;
} City;
функция:
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;
}
из основного:
City* pCity=cutCityData(singLine);
printf("%s\n", &(pCity->name));