Question

I'm making a minishell in C, I'm at the point that I'm accounting for environmental variables. I take the original input line from the user, and pass it to a function:

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

Where new is a fixed length char array. I loop through orig until I find ${ and then use getenv to find the value of the variable. If there is in fact a value, I simply copy it to new. However, I'm having problems when there is no value, and getenv returns null.

My teacher told me to simply insert a null character, however this doesn't make any sense to me, and I think he meant something different. If I were to insert a null character into orig, then when I parsed it into arguments, it would think that null character marked the end of string, and wouldn't bother looking for any further arguments.

For example, if I entered a session like so:

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

Then:

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

and

new = "echo my_user_name \0 xterm\0"

The output would be:

my_user_name 

Because it would consider my_user_name to be the last argument, seeing as there is a null terminator before it can read xterm into the argument list.

I know this is a vague question, but I figured some of you guys are pretty experienced in making minishells and know how this problem is typically addressed.

Was it helpful?

Solution

Perhaps he meant insert a null string, i.e. replace the variable with nothing. That's what /bin/sh does.

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

The null character is the one with value 0. It's commonly written as '\0'. As you know it is the C end-of-string marker.

The null string is also called the empty string. It's "". In C it's represented by a 0-length, 1-byte character array, as in:

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

But conceptually it's the unique string that contains no characters.

Personally, I prefer to call it the empty string rather than null string. Null is such an overused word. Null character. Null pointers.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top