#include <stdio.h>
#define LENGTH 128
#define NUMBER 5
int main(void){
int i
;
char s
[NUMBER
][LENGTH
];
for(i
= 0; i
< NUMBER
; i
++){
printf("s[%d] : ", i
);
scanf("%s", s
[i
]);
}
puts("-----------打印字符串-----------");
for(i
= 0; i
< NUMBER
; i
++){
printf("s[%d] = \"%s\"\n", i
, s
[i
]);
}
return 0;
}
程序中的数组s是5行128列的二维数组,即每行的字符串长度为127(null字符占用1节存储空间),可存储5行字符串。 注:字符串数据,将它们传入scanf函数时不可以带 & 运算符。
运行结果:
#include <stdio.h>
#define LENGTH 128
int str_length(const char s
[]){
int len
= 0;
while (s
[len
]){
len
++;
}
return len
;
}
int main(void){
char str
[LENGTH
];
printf("请输入字符串:");
scanf("%s", str
);
printf("字符串\"%s\"的长度是 %d。 \n", str
, str_length(str
));
}
运行结果: while 语句在循环条件表达式为非0的情况下,会执行循环体语句。该循环语句,会从头开始遍历数组。 循环继续的条件是, s[len]不是0,即不是null字符。变量len的初始值为0,每次执行循环体语句就自增1,直至出现null字符为止。
数组的长度为128,实际存储的长度只有5,剩下的都是空的。由此可知,字符串不一定正好撑满字符串数组。因为字符串中含有表示其末尾的null字符,所以第一个字符到 ‘\0’ (的前一个字符)为止的字符数,就是该字符串的长度。
使用指针遍历,获取字符串长度
#include <stdio.h>
int str_length
(const char *s
){
int len
= 0;
while (*s
++){
len
++;
}
return len
;
}
int main(void){
char str
[128];
printf("请输入字符串:");
scanf("%s", str
);
printf("字符串\"%s\"的长度是%d。\n", str
, str_length(str
));
return 0;
}
使用库中的函数获取字符串的长度
头文件原形说明返回值
#include <string.h>size_t strlen(const char *s)求出s指向的字符串的长度(不包括null字符)。返回s指向的字符串的长度。
#include <stdio.h>
#include <string.h>
int main(void){
char *p
= "vvcat";
printf("字符串的长度为%d", strlen(p
));
return 0;
}
实现strlen函数
#include <stdio.h>
size_t
strlen(const char *s
){
size_t len
= 0;
while(*s
++){
len
++;
}
return len
;
}
int main(void){
char *p
= "vvcat";
printf("字符串的长度为%d", strlen(p
));
return 0;
}