传递字符串会导致C中的空字符串?

时间:2014-03-23 13:21:36

标签: c string function arguments

我从main()中的用户那里得到一些字符串,我希望将这些字符串作为参数传递给另一个函数。当我运行调试时,我可以看到只有最后一个参数保存输入的字符串,而前两个参数是空的。当我将字符串定义为全局时,一切正常,为什么会这样?

我也尝试在从用户那里获取字符串之后立即打印字符串并将它们存储好。

以下是代码的一部分:

  char temp_destination[20];
    char temp_old_date[6];
    char temp_new_date[6];

    printf("Please enter destination, flight date and new date to update\n");
    printf("Destenation: ");
    scanf("%s",temp_destination);
    printf("Current date: ");
    scanf("%s",temp_old_date);
    printf("New Date: ");
    scanf("%s",temp_new_date);
    update_flight_date(database,temp_destination,temp_old_date,temp_new_date);

1 个答案:

答案 0 :(得分:0)

    char temp_destination[20];
    char temp_old_date[6];
    char temp_new_date[6];

此刻,用户输入将超过这些长度,内存将被彼此覆盖。在这种情况下,因为它们在堆栈(本地)上,所以它们会覆盖它们 - 自身(未定义的行为)。在全局变量中,它也发生了,但只是你的程序正在运行。

因此,您应该确保用户输入不应超过您定义的内容。