c - 在 C 中传递字符串会导致空字符串吗?

标签 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);

最佳答案

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

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

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

关于c - 在 C 中传递字符串会导致空字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22591456/

上一篇:c - 带绳子的堆叠机

下一篇:回退无效 *

相关文章:

c++ - Cuda - 体系结构 x86_64 OS X 的 undefined symbol

c - 打印给定字符串的所有子字符串的程序

if/else 语句中的 Java 字符串赋值

javascript - JavaScript 函数 commit() 和 send() 之间有什么区别?

c - strcmp 或数组错误?

c - 区域 ram 溢出,section .text 不适合区域 ram

php - 在 PHP 中是否有任何等效函数返回位置 `X` 处的字符?

python - 列表中的元组比函数需要的项目少 Python 3

java - 列出函数中接收到的类似对象

c - 如何重写 POSIX C 代码以使用数据报套接字而不是文件