我试图从一个函数中获取 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
答案 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;
}