@@ -13,10 +13,16 @@ struct string_array {
1313
1414void
1515init_string_array (struct string_array * arr ) {
16- arr -> length = 0 ;
1716 int i ;
17+ char * temp = NULL ;
18+
19+ arr -> length = 0 ;
1820 for (i = 0 ; i < MAX_ARRAY_LENGTH ; i ++ ) {
19- char * temp = (char * )malloc (MAX_STRING_LENGTH + 1 );
21+ temp = (char * )malloc (MAX_STRING_LENGTH + 1 );
22+ if (NULL == temp ) {
23+ printf ("malloc error\n" );
24+ exit (1 );
25+ }
2026 memset (temp , 0 , MAX_STRING_LENGTH + 1 );
2127 arr -> array [i ] = temp ;
2228 }
@@ -25,40 +31,42 @@ init_string_array(struct string_array * arr) {
2531void
2632destory_string_array (struct string_array * arr ){
2733 int i ;
28- for (i = 0 ; i < arr -> length ; i ++ ) {
34+
35+ for (i = 0 ; i < MAX_ARRAY_LENGTH ; i ++ ) {
2936 free (arr -> array [i ]);
3037 }
3138}
3239
3340void
3441print_string_array (struct string_array * arr ){
3542 int i ;
43+
3644 for (i = 0 ; i < arr -> length ; i ++ ) {
3745 printf ("%d-%s\n" , i , arr -> array [i ]);
3846 }
3947}
4048
4149void
4250split_by_blank (char * input , struct string_array * arr ) {
43- int scan_index = 0 , current_len = 0 ;
44- size_t len_input = strlen (input );
45- char ch , * p = input ;
51+ int scan_index = 0 ;
52+ size_t len_input = strlen (input ), current_len = 0 , copy_length ;
53+ char ch , * p = input , * dst ;
4654
4755 while ((ch = * (input ++ )) != '\0' ) {
4856 scan_index ++ ;
4957 current_len ++ ;
50- if (ch == ' ' || scan_index == len_input ) {
51- if (arr -> length == MAX_ARRAY_LENGTH ) {
58+ if (' ' == ch || scan_index == len_input ) {
59+ if (MAX_ARRAY_LENGTH == arr -> length ) {
5260 printf ("array length over flow\n" );
5361 exit (1 );
5462 }
55- char * dst = arr -> array [(arr -> length )++ ];
63+ dst = arr -> array [(arr -> length )++ ];
5664
57- size_t copy_length = scan_index == len_input ? current_len : current_len - 1 ;
65+ copy_length = scan_index == len_input ? current_len : current_len - 1 ;
5866 if (copy_length > MAX_STRING_LENGTH )
5967 copy_length = MAX_ARRAY_LENGTH ;
6068
61- strncpy (dst , p , copy_length );
69+ snprintf (dst , copy_length , "%s" , p );
6270
6371 printf ("debug1:scan_index=%d arr.length=%ld dst=%s p=%s\n" , scan_index , arr -> length , dst , p );
6472
@@ -70,14 +78,15 @@ split_by_blank(char * input, struct string_array * arr) {
7078
7179int
7280main (int argc , char * * argv ) {
81+ struct string_array arr ;
82+
7383 if (argc != 2 ){
7484 printf ("Usage: split_by_blank \"POST / HTTP/1.0\"\n" );
7585 return 1 ;
7686 }
7787
7888 printf ("%s\n" , argv [1 ]);
7989
80- struct string_array arr ;
8190 init_string_array (& arr );
8291
8392 split_by_blank (argv [1 ], & arr );
0 commit comments