如何为不同的 C 文件存储输入字符串的名称?

How do I store the name of a input string for a different C file?

我想做的是询问某人的姓名,然后将其存储起来,以便我可以将其用于不同的脚本。这是我目前所拥有的。

main.c

#include <stdio.h>
#include "functions.h"
int main()
{
    printf("welcome to the dungeon crawler.\n");
    //ask for the name//
    printf("please state your name: ");
    char name[100];
    scanf("%s", name);
    printf("hello %s.\n", name);
    main2();
    return 0;
}

main2.c

#include <stdio.h>
#include "functions.h"
int main2()
{
    printf("%s\n", name);
    return 0;
}

functions.h

#ifndef FUNCTIONS_H_INCLUDED
#define FUNCTIONS_H_INCLUDED
int name;
#endif // FUNCTIONS_H_INCLUDED

当我尝试 运行 它时,main2 说 (null)。

When I try to run it, main2 says (null).

因为您没有向该函数传递任何参数。

您应该使用一些描述性名称而不是 main2。应该只有一个 main,任何其他函数都应该有描述性名称来描述它的作用。例如:

void printit(const char * string)
{
    printf("%s\n", string);
}

然后从你的 main,你需要将 name 传递给那个函数:

printit(name);

作为旁注,您应该初始化您的字符缓冲区,并确保您的 scanf 不会读取比它应该读取的更多的字符:

char name[100] = "";    
scanf("%99s", name);

main 中的这个声明

char name[100];

声明了一个在 main 外部不存在的局部变量。

此声明在functions.h

int name;

声明了一个 int 类型的全局变量,它是零初始化的。

你有两个选择。

函数 main2 将具有 char *const char *

类型的参数
int main2( const char *name );

(将函数声明放在header functions.h)

并且会被称为

main2( name );

或者去掉全局变量

int name;

在 header functions.h 中,而不是移动局部声明

char name[100];

来自 header 中的模块 main.c 声明为

extern char name[100];

在文件范围内的模块之一中放置变量声明,例如

char name[100];

在任何情况下,函数 main2 的声明必须放在 functions.h.