【发布时间】:2021-06-29 10:29:08
【问题描述】:
我刚刚开始使用结构,我正在尝试将变量名称及其内容附加到结构变量中。例如。
输入:
PATH, getenv("PATH")
输出:
变量名称:PATH
变量内容:/usr/sbin
这是我的结构声明
int var_counter = 0;
typedef struct ENV_VARIABLES
{
char var_name[MAX_VAR_NAME]; // Stored the Variable Name ie PATH
char var_content[MAX_SIZE]; // Stores the Variable Contents ie \home\bin\shell...
}env_variable;
env_variable *env_vars;
这里我将参数传递给 environVars() 然后打印它们。
void iniEnvVars()
{
environVars("PATH", getenv("PATH"));
environVars("PROMPT", shellname);
environVars("CWD", getcwd("CWD", MAX_ARGS));
environVars("USER", getenv("USER"));
environVars("SHELL", "/home/.../");
environVars("TERMINAL", ttyname(STDIN_FILENO));
environVars("EXITCODE", EXITCODE);
printVars();
}
这里我将内容添加到结构中。
int environVars(char *env_name, char *env_content)
{
// First we want to check if there are any stored items in the struct
// If there isnt, we store the first env_name and its contents;
// Else, we check if it is there, else we add it to the struct.
// If it is already there we modify its contents.
if(var_counter == 0)
{
var_counter++;
env_vars = calloc((size_t)var_counter, sizeof(env_variable));
strcpy(env_vars[var_counter].var_name, env_name);
strcpy(env_vars[var_counter].var_content, env_content);
}
else
{
for(int i = 0; i < var_counter; i++)
{
if(strcmp(env_name, env_vars[i].var_name) == 0)
{
printf("Found\n");
printf("Modifying Variable Contents\n");
strcpy(env_vars[i].var_content, env_content);
break;
}
else
{
var_counter++;
env_vars = realloc(env_vars,(var_counter)*sizeof(env_variable));
strcpy(env_vars[i].var_name, env_name);
strcpy(env_vars[i].var_content, env_content);
break;
}
}
}
return 1;
}
我正在打印它们。
void printVars()
{
if(var_counter == 0)
{
printf("There are no Enviromental Variables stored.\n");
}
else
{
for(int i = 0; i < var_counter; i++)
{
printf("Var Name: %s\n\n ", env_vars[i].var_name);
printf("Var Contents: %s\n\n ", env_vars[i].var_content);
}
}
}
我使用了 calloc 和 realloc,但我不太确定是否应该使用 malloc。
发生的错误是它没有打印任何东西。 我确实运行了调试,并且发生了同样的事情。什么都没有打印。
【问题讨论】:
-
不确定是否是您的问题,但您需要查看所有现有的变量,然后再决定添加一个新变量。
-
var_counter似乎未定义...您忘记发布定义了吗?