Указатель показывает мусор по какой-то причине - PullRequest
0 голосов
/ 31 января 2019

У меня проблема с указателем.У меня есть функция void, которую я хочу вернуть.Предмет быть точным.Итак, я использую указатель.Проблема в том, что когда я прошу пользователя ввести тему, а затем вызывается моя функция, мой указатель возвращает мусор вместе с данной темой.Например, «какой-то странный персонаж», а не Java.Я подозреваю, что мой scanf в функции annc неисправен, но я действительно понятия не имею, почему я не понимаю свой предмет правильно.

void announc(char day1[10], char day2[10], char date1[5], char date2[5], int class1, int class2, char *subject);
int main()
{
    char day1[10], day2[10], date1[5], date2[5];
    char subject[10];
    int class1, class2;
    scanf("%s %s %s %s %d %d", day1, date1, day2, date2, &class1, &class2);
    announc(day1, day2, date1, date2, class1, class2, subject);
    printf("subject: %s\n", subject);
    return 0;
}
void announc(char day1[10], char day2[10], char date1[5], char date2[5], int class1, int class2, char *p)
{

    printf("something");
    *p = scanf("%s", p);

}

1 Ответ

0 голосов
/ 31 января 2019
*p = scanf("%s", p);

Не уверен, что вы намеревались с этим.scanf возвращает количество заполненных аргументов (т. Е. 1).Затем вы присваиваете этот результат первому элементу p.При печати вы видите попытку терминала напечатать символ со значением ASCII 1 (за которым следует оставшаяся часть строки, которая не изменяется).

Просто не делайте этого!Действие, которое вам нужно выполнить, ввод строки в объект, на который указывает p, достигается без касания возвращаемого значения:

scanf("%s", p);

Каждый аргумент scanf (кроме форматаstring) фактически является « out аргументом ».Это должно работать таким образом, потому что может быть (и обычно есть!) Более чем одна вещь для чтения, но вы можете вернуть только одно значение из функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...