将变量传递给一个函数传递给另一个函数

时间:2018-09-19 19:57:30

标签: c string function

我试图从一个函数中获取 userInput ,而不是在另一个函数中使用它。第一次输入字符时,当我测试 char 是否在 DetermineWhatCommand 函数中正常工作时,输出错误,但随后输入的字符串正确显示。 / p>

#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 :(得分:3)

   char userInput[MAX];

在堆栈上-因此当函数返回时超出范围。

要么将其作为参数传递,要么使用malloc使其堆积在堆上。

顺便说一句:new是C ++-如果使用C ++标记问题,请使用std::string

printf(userInput);总是错误的

答案 1 :(得分:0)

当您动态地使用内存时,它属于整个程序,而不是已定义内存的范围。

在OP的代码中,一旦控制超出了“静态”分配内存的功能范围,即功能 GetUserInput 的范围,内存就释放了。

尽管此问题已使用new,但由于该问题已标记有标签 C ,因此,我将介绍您的 C 版本:

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

       return userInput;
  }