Если предположить, что вы делаете это C, а не C++.
Существует два подхода: inputString
должен выделить память, или вызывающий абонент inputString
должен выделить память.
если inputString выделяет память ваша функция, вероятно, выглядеть так:
char* inputString(void)
{
int len = strlen (MyInternalString) + 1;
char* s = malloc (len);
strncpy(s, MyInternalString, len);
return s;
} //similar to what Rustram illustrated
Вы должны также включать в себя: недействительным freeString (символ * НТР) { бесплатно (НТР); } как есть. Это позволяет пользователю понять, что они необходимы для управления памятью самой возвращенной строки.
В качестве альтернативы вы можете написать inputString, где пользователь должен предоставить требуемую память. Это будет выглядеть как-то
int inputString(char* str, int maxLen) //
{
if (maxLen >= myInternalStringLength + 1)
{
strncpy(str, myInternalString, maxLen)
}
return myInternalStringLength + 1;
}
Здесь пользователь моей строки может проверить код возврата, чтобы увидеть, если буфер, который он выделил был достаточно большим.Если он был слишком мал, то он всегда может перераспределить больший один
Ваш главный теперь становится:
int main()
{
char *s = NULL;
int len = inputString(s, 0);
s = alloca(len); //allocates the memory on the stack
len = inputstring(s, len);
printf("%s",s);
} //no need to free the memory because the memory alloca'ed gets
//freed at the end of the stack frame
это C или C++? – 2010-12-07 15:35:57
Что не так в использовании `std :: string` и` std :: cin`? – 2010-12-07 15:36:52
это английский? – Simone 2010-12-07 15:37:08