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

问题描述

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

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说(空)。

解决方法

主声明

char name[100];

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

此声明在functions.h

int name;

声明类型int的全局变量,该变量初始化为零。

您有两种选择。

函数main2的参数类型为char *const char *

int main2( const char *name );

(将函数声明放在标题functions.h中)

将被称为

main2( name );

或删除全局变量

int name;

在标题functions.h中,而不是移动本地声明

char name[100];

从标头中的模块main.c声明为

extern char name[100];

在文件作用域的模块之一中,放置变量声明,例如

char name[100];

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

,

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

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

您应该使用一些描述性名称,而不要使用main2。应该只有一个main,其他任何函数都应具有描述性名称,以描述其功能。例如:

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

然后从您的主设备开始,将name传递给该函数:

printit(name);

作为旁注,您应该初始化char缓冲区,并确保您的scanf读取的字符不超过应读取的字符:

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