Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to pass '#' character as a command-line argument

I can't pass strings starting with # as command-line arguments.

Here is a simple test:

#include <stdio.h>  int main(int argc, char *argv[]) {     for (int i = 1; i < argc; i++)         printf("%s ", argv[i]);      putchar('\n');      return 0; } 

If I input the arguments as follows:

2 4 # 5 6 

The value of argc is 3 and not 6. It reads # and stops there. I don't know why, and I can't find the answer in my copies of The C Programming Language and C Primer Plus.

like image 572
cd-00 Avatar asked Nov 13 '19 13:11

cd-00


People also ask

What causes difficulty in passing?

Constipation occurs when bowel movements become less frequent and stools become difficult to pass. It happens most often due to changes in diet or routine, or due to inadequate intake of fiber. You should call your doctor if you have severe pain, blood in your stools, or constipation that lasts longer than three weeks.

What causes a person not to pass stool?

Constipation can happen for many reasons, such as when stool passes through the colon too slowly. The slower the food moves through the digestive tract, the more water the colon will absorb and the harder the feces will become. A person who poops fewer than 3 times per week may have constipation.

What happens if you cant pass hard stool?

Untreated fecal impaction could have serious, life-threatening complications, including: A hole in your colon (bowel perforation). Bleeding (hemorrhage). Uncontrollable bowel movements (fecal incontinence).


2 Answers

# begins a comment in Unix shells, much like // in C.

This means that when the shell passes the arguments to the progam, it ignores everything following the #. Escaping it with a backslash or quotes will mean it is treated like the other parameters and the program should work as expected.

2 4 \# 5 6 

or

2 4 '#' 5 6 

or

2 4 "#" 5 6 

Note that the # is a comment character only at the start of a word, so this should also work:

2 4#5 6 
like image 70
fanduin Avatar answered Sep 19 '22 19:09

fanduin


When passing the value through command line arguments you have to walk through these following instructions. The following characters have special meaning to the shell itself in some contexts and may need to be escaped in arguments:

` Backtick (U+0060 Grave Accent) ~ Tilde (U+007E) ! Exclamation mark (U+0021) # Hash (U+0023 Number Sign) $ Dollar sign (U+0024) & Ampersand (U+0026) * Asterisk (U+002A) ( Left Parenthesis (U+0028) ) Right parenthesis (U+0029)  (⇥) Tab (U+0009) { Left brace (U+007B Left Curly Bracket) [ Left square bracket (U+005B) | Vertical bar (U+007C Vertical Line) \ Backslash (U+005C Reverse Solidus) ; Semicolon (U+003B) ' Single quote / Apostrophe (U+0027) " Double quote (U+0022) ↩ New line (U+000A) < Less than (U+003C) > Greater than (U+003E) ? Question mark (U+003F)   Space (U+0020)1 
like image 24
VJAYSLN Avatar answered Sep 21 '22 19:09

VJAYSLN