- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要从用户那里获取输入并处理变量。我需要具备以下功能:
set varname = somevalue
:将名为varname
的环境变量的值设置为somevalue
指定的值。delete varname
:删除指定的环境变量。print varname
:打印出指定环境变量的当前值。到目前为止我所拥有的是:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <readline/readline.h>
#include <readline/history.h>
int main(int argc, char **argv) {
char * s;
char * command;
char * varName;
char * varValue;
while (s = readline("prompt> ")) {
/* Initialise char* variables */
command = NULL;
varName = NULL;
varValue = NULL;
add_history(s); /* adds the line to the readline history buffer */
printf("> %s\n", s); //print > sign
int cmdNo = 1;
int i;
// parse through entire string
for (i = 0; i < strlen(s); i++)
{
// check for space or = and jump over it
while ((isspace(s[i]) || s[i] == '=') && (i < strlen(s)))
{
i++;
}
// check if i is greater than string size
if (i >= strlen(s))
{
printf("Bad command format!\n");
break;
}
// if cmdNo == 1, get the command
if (cmdNo == 1)
{
int commandSize = 0;
int index = i;
// point index to space
while (!isspace(s[index]))
{
commandSize++;
index++;
}
// get command
command = (char*)malloc(commandSize + 1);
int destIndex = 0;
// copy command into command array
while (i<index)
{
command[destIndex] = s[i];
destIndex++;
i++;
}
// adding terminate character
command[destIndex] = '\0';
// increase command number by 1
cmdNo++;
}
// if cmdNo == 2 we deal with variable name
else if (cmdNo == 2)
{
// variable name size
int varNameSize = 0;
int index = i;
// point index to space
while (!isspace(s[index]))
{
varNameSize++;
index++;
}
// get var name
varName = (char*)malloc(varNameSize + 1);
int index2 = 0;
while (i<index)
{
varName[index2] = s[i];
index2++;
i++;
}
// add terminate char
varName[index2] = '\0';
// increment cmdNo by 1
cmdNo++;
}
// if cmdNo == 3 we deal with variable value
else if (cmdNo == 3)
{
int valueSize = 0;
int index = i;
// point index to space
while (!isspace(s[index]) && s[index] != '\0')
{
valueSize++;
index++;
}
// get variable value
varValue = (char*)malloc(valueSize + 1);
int index2 = 0;
while (i<index)
{
varValue[index2] = s[i];
index2++;
i++;
}
// add terminate char
varValue[index2] = '\0';
}
}
// print command, variable name and value
if (command != NULL)
{
printf("%s", command);
}
if (varName != NULL)
{
printf(" %s", varName);
}
if (varValue != NULL)
{
printf(" %s\n", varValue);
}
/* clean up! */
free(s);
free(command);
free(varName);
free(varValue);
}
return(0);
}
显然,我必须把 putenv()
、setenv()
或 clearenv()
放在某个地方。我对这些命令没有太多经验。
最佳答案
崩溃是由 cmdNo
1 和 2 的循环 while (!isspace(s[index]))
引起的 - 如果没有第三个(或第二个) ) 输入行上的单词,它们将越过字符串中的 NUL 终止符并且(可能)崩溃。在检查 cmdNo
3 情况时,您需要在这些循环中检查 NUL。
如果输入行上的单词超过 3 个,您也会遇到问题 - 在第 4 个单词上您将进入无限循环。
而不是像您所做的那样在 if
/else if
/else if
中复制单词的代码,最好将数组中的单词。您甚至可以使用 strtok_r
或 strsep
而不是手动解析字符。
关于c - Unix 上的 putenv() 和 setenv(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40383207/
我有一个简单的 std::setenv 调用,它在我的 gcc 下的 Linux 发行版上运行良好。但是,在我的 Mac OS X 上使用 clang 时,出现以下错误。 error: no memb
我们有一个正在运行的 Team City Build Server,并且想要编译一个 Visual C++ 项目。到目前为止,这很容易,因为我已经使用 Windows SDK 设置了 Windows
获取 在初始化程序中将类型表达式列表视为复合表达式在这两个函数调用上 - char itoa(new_total, new_total_ch, 10); int setenv("COU
我的学校要我实现setenv() 标准c库函数的行为。我不允许为此实现使用 setenv()。我该怎么做? 最佳答案 在 C 编程语言的许多实现中,尤其是在 POSIX 上,可以从 environ 全
我正在使用 C++ 和 setenv 设置变量,如下面的程序所示: setenv("TEST", "$HOME/test", 1); char* val = getenv("TEST"); print
在 Linux 中使用二进制环境变量时,我发现了一些奇怪的行为,似乎某些单个字节是错误的。我仔细检查了一下,似乎某些字节在提供给 setenv() 时总是会被错误地“转换”。看看这个: #includ
我在这里阅读了几篇文章,但仍然对 setenv() 的方式感到困惑作品: linux-where-are-environment-variables-stored where-is-the-envir
在我的.htaccess中我设置: SetEnv APPLICATION_ENV development 我想检查 APPLICATION_ENV 是否等于 development 然后运行 ap
我正在尝试使用 setenv() 设置新的环境变量。 但我注意到 setenv() 函数仅在我使用环境“extern char **environ”时设置我的新环境变量 但我想使用 main() 的参
所以我正在尝试构建一个简单的 shell,它可以添加、删除、获取和打印环境。我知道来自父进程的环境拷贝是通过 C++ 程序中的 int main() 获得的,但是在调用 setenv 之后,环境拷贝是
我无法设置 setenv.sh 文件正常工作。谁能帮我在服务器上设置它。 SETENVPATH="${CATALINA_BASE:-$CATALINA_HOME}" if [ -r "$SETENVP
我想通过虚拟机选项修改xml文件。 所以我这样写setenv.sh。 export JAVA_OPTS="$JAVA_OPTS -server -Drun.my_own_property=my_own
有没有办法使用 C 中的函数更改 pragma omp for 循环中的 schedule 类型?我试图在并行语句之前执行 setenv("OMP_SCHEDULE", "guided", 1);,但
我需要用户在文本文件中定义我的程序所需的所有环境变量,如下所示。 MyDLLPath = C:\MyDLLPath 我的选项 = 选项 1 PATH = %MyDLLPath%;%PATH%; 在我的
我正在为系统编程类(class)开发自定义 shell。我们被指示实现内置的 setenv() 和 unsetenv() 命令,并提示检查 putenv()。 我的问题是 setenv(char*,
我在 Linux 中开发了一个 Tcl/Tk 脚本工具。为了运行该工具,每次我都需要在 shell 中像这样设置环境变量: setenv LD_LIBRARY_PATH /opt/lsf/9.1/li
我有下面的方法,它正确地将 ret 值设置为 0(表示在 setenv 中成功),但是当我检查是否实际设置了这个环境变量时,它不存在。为什么会这样? void Class::mysetenv(cha
我编写了以下 C 代码来将环境变量设置为 \x09。但是当我使用 echo $EGG | hexdump,我看到它将它设置为 00。只有当第一个半字节为零时才会出现此问题。知道哪里出了问题吗? cha
我有一个简单的测试项目,期望在运行时打印 goroutine 调度消息。 从 Goland 配置设置 env 它可以工作。但它不是来自下面的代码,该应用程序不会打印调度信息。有没有人解释一下这里发生了
我在 Linux 中使用 tcsh 终端。在我通常使用的另一个终端中,我将一些许可证文件的路径设置如下: export PATH="$PATH:$MODEL_TECH" Tcsh shell 无法
我是一名优秀的程序员,十分优秀!