使用strlen函数,让print_arguments知道每个字符串参数都有多长,之后将长度传入print_letters。然后重写print_letters,让它只处理固定的长度,不按照’\0’终止符。你需要#include <string.h>来实现它。
1 #include <stdio.h>
2 #include <ctype.h>
3 #include <string.h>
4
5
6 // forward declarations
7 //int can_print_it(char ch);
8 void print_letters(char arg[],int n);
void print_letters(char arg[],int n);
9
10 void print_arguments(int argc, char* argv[])
11 {
12 int i = 0;
13
14 for(i = 0; i < argc; i++) {
15 print_letters(argv[i],strlen(argv)); //重点
16 }
17 }
18
19 void print_letters(char arg[],int n)
20 {
21 int i = 0;
22
23 for(i = 0; i < n; i++) {
24 char ch = arg[i];
25
26 if(isalpha(ch) || isblank(ch)) {
27 printf("'%c' == %d ", ch, ch);
28 }
29 }
30
31 printf("\n");
32 }
33
34 /*
35 int can_print_it(char ch)
36 {
37 return isalpha(ch) || isblank(ch);
38 }
39 */
40
41 int main(int argc, char *argv[])
42 {
43 print_arguments(argc, argv);
44 return 0;
45 }
因为从char型的字符串和string型字符串,有自己的测量长度的方法:
string str="hello";
int len = str.size();
char ch[]="hello"
int len = str[ch];
char型字符串给函数传参时,只需要将首地址传过去即可,用char *ch
但是这里我忽略了argv是二维数组。应改为:
1 #include <stdio.h>
2 #include <ctype.h>
3 #include <string.h>
4
5
6 // forward declarations
7 //int can_print_it(char ch);
8 void print_letters(char arg[],int n);
9
10 void print_arguments(int argc, char* argv[])
11 {
12 int i = 0;
13
14 for(i = 0; i < argc; i++) {
15 print_letters(argv[i],strlen(argv[i]));
16 }
17 }
18
19 void print_letters(char arg[],int n)
20 {
21 int i = 0;
22
23 for(i = 0; i < n; i++) {
24 char ch = arg[i];
25
26 if(isalpha(ch) || isblank(ch)) {
27 printf("'%c' == %d ", ch, ch);
28 }
29 }
30
31 printf("\n");
32 }
33
34 /*
35 int can_print_it(char ch)
36 {
37 return isalpha(ch) || isblank(ch);
38 }
39 */
40
41 int main(int argc, char *argv[])
42 {
43 print_arguments(argc, argv);
44 return 0;
45 }