Передача переменной одной функции в другую - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь получить userInput из одной функции, чем использовать ее в другой.Когда я проверяю, работает ли char в функции DetermineWhatCommand , при первом вводе символов я получаю неправильный вывод, но после этого следующая введенная строка отображается правильно.

#include<stdio.h>
#include<string.h>
#define MAX 100




char * GetUserInput(){
  char userInput[MAX];
  fgets(userInput, sizeof (userInput), stdin);
  userInput[strcspn(userInput, "\n")] = '\0';

   return userInput;
}

void DetermineWhatCommand(char *userInput){
  printf(userInput);

}


int main() {

    char * userInput;
    userInput = new char[MAX];
    char exitTest[] = "exit";

    while(strcmp(exitTest, userInput) != 0){
        userInput = GetUserInput();
        DetermineWhatCommand(userInput);

   }
   return 0;
}

Выход:

Hello    //First string entered
@        //What the output in the function looks like
Hello    //Second string entered
Hello    //What the output in the function looks like 

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Когда вы используете память динамически , тогда она принадлежит всей программе, а не области, в которой она была определена.

В коде OP память свободна, как только управление выходит изобласть действия функции, в которой память выделяется «статически», то есть область действия функции GetUserInput .

Поскольку этот вопрос был помечен меткой C несмотря на new будучи использованным в нем, я бы представил вашу C версию:

  char * GetUserInput()
  {
       char *userInput = malloc(MAX);
       //YOUR FUNCTIONALITY..........

       return userInput;
  } 
0 голосов
/ 19 сентября 2018

Это

   char userInput[MAX];

находится в стеке - поэтому выходит из области видимости при возврате функции.

Либо передайте его в качестве параметра, либо используйте malloc, чтобы скрыть егов куче.

Кстати: new - это C ++ - При использовании тега C ++ задайте вопрос как таковой и используйте std::string

Также printf(userInput); неизменно неверен

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