2013-12-13 3 views
-1

Как я могу написать get (???); Спасибо.Как использовать функцию gets() в функции для назначения строки в char * ch?

void getStr(**temp){ 
    gets(???); 
} 

void main(){ 
    char *ch; 
    printf("Enter a string: \n"); 
    getStr(&ch); 
    printf("main: %s\n", ch); 
} 

------ Выход ------ Введите строку: а главные: а

+2

Добро пожаловать в SO! Вы читали о функциях get? Что непонятно? – Derek

ответ

2

Никогда не используйте функцию gets. Это по своей сути небезопасно, поскольку нет способа защитить от перерасхода (пользователь вводит больше данных, чем вы готовы принять). Фактически, он был удален с языка по стандарту ISO C 2011 года.

Вместо этого вы должны использовать fgets(). Это немного сложнее в использовании (во-первых, он оставляет в строке строку '\n'), но она позволяет указать максимальное количество символов для чтения.

Функция getStr, вероятно, не должна принимать аргумент char**; a char*, так как он не будет изменять указатель, просто считывая данные в массив, на который указывает указатель.

Вам нужно будет выделить массив char для чтения данных. Вы можете либо объявить объект массива:

char line[200]; // for example 

или использовать malloc выделить пространство.

Еще одна вещь: void main() неверен. (Составителям разрешено принимать его, но нет веских оснований для его использования.) Правильное определение: int main(void). Если у вас есть книга, в которой говорится, что вы используете void main(), она была написана человеком, который не очень хорошо знает язык C, и, вероятно, он будет иметь более серьезные ошибки.

Посмотрите на comp.lang.c FAQ.