Is \n in a char array considered a single character?

In the below char array:
 
char text1[50] = "\aHello,\n\tWorld! Mistakee\b was \"Extra 'e'\"!\n"


would \a or \n be treated as a single character, and if so, then how does the compiler know that the backslash and the 'a' are two different characters?

The reason why I ask is because I am looking at one of the examples from exercise and in the switch statement, it seems to treat special characters like \n as a single character:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
void escape(char * s, char * t) {

    int i, j;

    i = j = 0;

    

    while ( t[i] ) {

        

        /*  Translate the special character, if we have one  */

        

        switch( t[i] ) {

        case '\n':

            s[j++] = '\\';

            s[j] = 'n';

            break;

            

        case '\t':

            s[j++] = '\\';

            s[j] = 't';

            break;

            

        case '\a':

            s[j++] = '\\';

            s[j] = 'a';

            break;

            

        case '\b':

            s[j++] = '\\';

            s[j] = 'b';

            break;

            

        case '\f':

            s[j++] = '\\';

            s[j] = 'f';

            break;

            

        case '\r':

            s[j++] = '\\';

            s[j] = 'r';

            break;

            

        case '\v':

            s[j++] = '\\';

            s[j] = 'v';

            break;

            

        case '\\':

            s[j++] = '\\';

            s[j] = '\\';

            break;

            

        case '\"':

            s[j++] = '\\';

            s[j] = '\"';

            break;

            

        default:

            

            /*  This is not a special character, so just copy it  */

            

            s[j] = t[i];

            break;

        }

        ++i;

        ++j;

    }

    s[j] = t[i];    /*  Don't forget the null character  */

}


Is \n really just a single character?
Is \n really just a single character?


Yes.

The \ character marks the start of an "escape sequence". This lets the compiler know that the next character or group of characters marks the start of a special code.

\n = newline
\r = carriage return
\x53 = ASCII code 0x53 (ie: a capital 'S')
etc
etc

The escape character also lets you put things in a string literal that you normally couldn't... like a quotation mark:

\" = quotation mark
\\ = '\' character

1
2
3
4
std::string foo = "Joe said "Hi"";  // <- this won't work because C++ thinks the quotes
    // mark the end of the string

std::string foo = "Joe said \"Hi\""; // <- this will work because the quotes are escaped 
Last edited on
The backslash is just to mark the start of an escape sequence which store special characters.

http://en.cppreference.com/w/cpp/language/escape

*Edit
So as an answer to your question, Yes it is a single character. You can use escape sequence on any character. Say you want letter 'K' another way would be '\113'

http://ideone.com/1f2wEv
Last edited on
> if so, then how does the compiler know that the backslash and the 'a' are two different characters?

1
2
3
char txt[] = "\\aHello" ; // txt[0] is the backslash character, and txt[1] is 'a'.

assert( txt[0] == '\\' ) ; '\\' is a single backslash character


One could also use raw string literals. http://www.stroustrup.com/C++11FAQ.html#raw-strings
Last edited on
Topic archived. No new replies allowed.