gpt4 book ai didi

c - 如何在我的 minishell 中处理 null 环境变量?

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:56 25 4
gpt4 key购买 nike

我正在用 C 语言制作一个 minishell,我正在考虑环境变量。我从用户那里获取原始输入行,并将其传递给一个函数:

int expand(char *orig, char *new, int newsize)

其中new是一个固定长度的char数组。我循环遍历 orig 直到找到 ${ ,然后使用 getenv 找到变量的值。如果确实有一个值,我只需将其复制到新的。但是,当没有值时我遇到了问题,getenv 返回 null。

我的老师告诉我只需插入一个空字符,但这对我来说没有任何意义,我认为他的意思有所不同。如果我要在 orig 中插入一个空字符,那么当我将它解析为参数时,它会认为空字符标记了字符串的结尾,并且不会费心去寻找任何进一步的参数。

例如,如果我像这样进入 session :

echo ${USER} ${NOTHING} ${TERM}

然后:

orig = "echo ${USER} ${NOTHING} ${TERM}\0"

new = "echo my_user_name \0 xterm\0"

输出将是:

my_user_name 

因为它会认为 my_user_name 是最后一个参数,因为在它可以将 xterm 读入参数列表之前有一个空终止符。

我知道这是一个模糊的问题,但我认为你们中的一些人在制作 minishell 方面非常有经验并且知道通常如何解决这个问题。

最佳答案

也许他的意思是插入一个空字符串,即将变量替换为空。这就是/bin/sh 的作用。

$ echo "hi $joe how are you"
hi how are you

空字符是值为0的字符,一般写成'\0'。如您所知,它是 C 语言的字符串结束标记。

空字符串也称为空字符串。它是 ""。在 C 中,它由一个 0 长度、1 字节的字符数组表示,如下所示:

char str[1] = {'\0'};

但从概念上讲,它是不包含任何字符的唯一字符串。

就我个人而言,我更喜欢称它为空字符串而不是空字符串。 Null 是一个被过度使用的词。空字符。空指针。

关于c - 如何在我的 minishell 中处理 null 环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12925759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com