It was a night like any other: I was procrastinating on my programming homework by working on another project when my flatmate came over.

“Hey Matt,” he said, “you’re good with C. I’m having some trouble printing a string.”

“Okay, what’s the problem?”

“So the string is a domain name, but instead of dots, it has a number telling you how many characters are in the next chunk of the name. So like 3www6google3com. So my question is, how do I convert a character into a number?”

“Ah, that’s easy,” I said, “just subtract a '0' character.”

“What?” he asked. He’s not a C programmer, and so didn’t know this simple trick.

“ASCII has the digit characters arranged sequentially, so the '3' character is three larger than the '0' character. So if you subtract a '0' from a '3', you just get 3 out.”

Through some more explanation and description by my flatmate, I figure out that it’s not actually a '3' character, but a character with the value 3. No '0' subtraction required!

“Okay, so you get the first character, spit out that many characters, you know the next one is a number, so you repeat that until you hit the end of the string. What’s the problem?”

“Well,” he said, “I’m trying to print out test.domain.com but it’s not printing the second t in test.”

“Ah ha!” I said. “You’re probably trying to print a character that messes with your text. Like, there’s a backspace ASCII character that deletes the last character printed.”

“What‽”

“It goes back to when we had teletypes instead of terminals. Not important right now. So, your last character before domain gets deleted. domain is 6 characters, so I bet the backspace character has value 6.”

I look up an ASCII table. “Aw darn, the backspace character is value 8, not 6. Must be some other problem. Let me take a look at your code.”

“Oh wait,” he said. “It’s not test.domain. It’s test.mydomain.”

mydomain. 8 characters. So the prefixed 8 was causing the last t in test to get deleted. Another mystery solved. I went back to my project and my flatmate went back to his.

The End?

Tune in next time for more…

Mysteries of the Code