C语言 读取字符串数组中的字符串并获取字符串的长度
原创
©著作权归作者所有:来自51CTO博客作者wx6296d048c716d的原创作品,请联系作者获取转载授权,否则将追究法律责任
#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; // 返回数组str中首个值为null的元素的下标值
}
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;
}