@@ -27,61 +27,71 @@ String::String( const char *value )
27
27
if ( value == NULL )
28
28
value = " " ;
29
29
getBuffer ( _length = strlen ( value ) );
30
- strcpy ( _buffer, value );
30
+ if ( _buffer != NULL )
31
+ strcpy ( _buffer, value );
31
32
}
32
33
33
34
String::String ( const String &value )
34
35
{
35
36
getBuffer ( _length = value._length );
36
- strcpy ( _buffer, value._buffer );
37
+ if ( _buffer != NULL )
38
+ strcpy ( _buffer, value._buffer );
37
39
}
38
40
39
41
String::String ( const char value )
40
42
{
41
43
_length = 1 ;
42
44
getBuffer (1 );
43
- _buffer[0 ] = value;
44
- _buffer[1 ] = 0 ;
45
+ if ( _buffer != NULL ) {
46
+ _buffer[0 ] = value;
47
+ _buffer[1 ] = 0 ;
48
+ }
45
49
}
46
50
47
51
String::String ( const unsigned char value )
48
52
{
49
53
_length = 1 ;
50
54
getBuffer (1 );
51
- _buffer[0 ] = value;
52
- _buffer[1 ] = 0 ;
55
+ if ( _buffer != NULL ) {
56
+ _buffer[0 ] = value;
57
+ _buffer[1 ] = 0 ;
58
+ }
53
59
}
54
60
55
61
String::String ( const int value, const int base )
56
62
{
57
63
char buf[33 ];
58
64
itoa ((signed long )value, buf, base);
59
65
getBuffer ( _length = strlen (buf) );
60
- strcpy ( _buffer, buf );
66
+ if ( _buffer != NULL )
67
+ strcpy ( _buffer, buf );
61
68
}
62
69
63
70
String::String ( const unsigned int value, const int base )
64
71
{
65
72
char buf[33 ];
66
73
ultoa ((unsigned long )value, buf, base);
67
74
getBuffer ( _length = strlen (buf) );
68
- strcpy ( _buffer, buf );
75
+ if ( _buffer != NULL )
76
+ strcpy ( _buffer, buf );
69
77
}
70
78
71
79
String::String ( const long value, const int base )
72
80
{
73
81
char buf[33 ];
74
82
ltoa (value, buf, base);
75
83
getBuffer ( _length = strlen (buf) );
76
- strcpy ( _buffer, buf );
84
+ if ( _buffer != NULL )
85
+ strcpy ( _buffer, buf );
77
86
}
78
87
79
88
String::String ( const unsigned long value, const int base )
80
89
{
81
90
char buf[33 ];
82
91
ultoa (value, buf, 10 );
83
92
getBuffer ( _length = strlen (buf) );
84
- strcpy ( _buffer, buf );
93
+ if ( _buffer != NULL )
94
+ strcpy ( _buffer, buf );
85
95
}
86
96
87
97
char String::charAt ( unsigned int loc ) const
@@ -91,6 +101,7 @@ char String::charAt( unsigned int loc ) const
91
101
92
102
void String::setCharAt ( unsigned int loc, const char aChar )
93
103
{
104
+ if (_buffer == NULL ) return ;
94
105
if (_length > loc) {
95
106
_buffer[loc] = aChar;
96
107
}
@@ -116,8 +127,11 @@ const String & String::operator=( const String &rhs )
116
127
free (_buffer);
117
128
getBuffer ( rhs._length );
118
129
}
119
- _length = rhs._length ;
120
- strcpy ( _buffer, rhs._buffer );
130
+
131
+ if ( _buffer != NULL ) {
132
+ _length = rhs._length ;
133
+ strcpy ( _buffer, rhs._buffer );
134
+ }
121
135
return *this ;
122
136
}
123
137
@@ -138,10 +152,12 @@ const String & String::operator+=( const String &other )
138
152
{
139
153
char *temp = _buffer;
140
154
getBuffer ( _length );
141
- strcpy ( _buffer, temp );
155
+ if ( _buffer != NULL )
156
+ strcpy ( _buffer, temp );
142
157
free (temp);
143
158
}
144
- strcat ( _buffer, other._buffer );
159
+ if ( _buffer != NULL )
160
+ strcat ( _buffer, other._buffer );
145
161
return *this ;
146
162
}
147
163
@@ -213,6 +229,7 @@ boolean String::equalsIgnoreCase( const String &s2 ) const
213
229
214
230
String String::replace ( char findChar, char replaceChar )
215
231
{
232
+ if ( _buffer == NULL ) return *this ;
216
233
String theReturn = _buffer;
217
234
char * temp = theReturn._buffer ;
218
235
while ( (temp = strchr ( temp, findChar )) != 0 )
@@ -223,6 +240,7 @@ String String::replace( char findChar, char replaceChar )
223
240
224
241
String String::replace ( const String& match, const String& replace )
225
242
{
243
+ if ( _buffer == NULL ) return *this ;
226
244
String temp = _buffer, newString;
227
245
228
246
int loc;
@@ -376,6 +394,7 @@ String String::toUpperCase() const
376
394
377
395
String String::trim () const
378
396
{
397
+ if ( _buffer == NULL ) return *this ;
379
398
String temp = _buffer;
380
399
unsigned int i,j;
381
400
0 commit comments