字符串输入
gets函数,构造为 char *gets(char * s)
, 不足是不检查预留存储区是否能够容纳你实际输入数据,多出则溢出。
#include <stdio.h>
#define MAX 80
int main()
{
char name[MAX];
char *ptr;
printf("What's your name?
");
ptr = gets(name);
printf("Hello , %s!
" , name);
return 0;
}
fget函数,避免溢出问题,第二个参数指定获取的长度,第三个参数为获取来源,可以是文件或标准输入。
#include <stdio.h>
#define MAX 10
int main()
{
char name[MAX];
char *ptr;
printf("What's your name?
");
ptr = fgets(name, MAX, stdin);
printf("Hello , %s! , my firend %s!
", name, ptr);
return 0;
}
scanf函数,优点是可以格式化输入,缺点是前一个未能读完的参数会成为第二个变量值。
#include <stdio.h>
#define MAX 10
int main()
{
char name[11], gf_name[12];
int count;
printf("What's your name and your gf's name?
");
count = scanf("%5s %10s", name, gf_name);
printf("Hello %d, , %s! , your girl friend is %s!
", count, name, gf_name);
return 0;
}
字符串输出
- puts 直接输出
- fputs 可输出到文件流
- priintf 格式化输出
#include <stdio.h>
int main()
{
char beauty[80] = "you are best beautiful in the world";
const hi = "ni hao a xiaohui !";
puts("this is puts call
");
fputs(beauty, stdout);
puts("
");
printf("foramt output is %s
", "ok");
return 0;
}
常用字符串函数
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char beauty[80] = "you are best beautiful in the world
";
char hi[120] = "ni hao a xiaohui !";
// strlen 函数 字符个数,不包括 结束标志
printf("length of beauty is %d , sizeof is %d
", strlen(beauty), sizeof(beauty));
*(beauty + 3) = 'r';// 修改字符串
printf(beauty);
// strcat(s1,s2) 向s1添加s2 , s1可能溢出
printf("strcat add = %s
", strcat(hi, beauty));
// strncat(s1,s2,max) 向s1添加s2 指定添加的长度
char s1[5] = "hi";
char s2[10] = "hi boy";
printf("strncat add = %s
", strncat(s1, s2, 2)); // hihi
// strcmp(s1,s2) 相同则返回0
char s3[3] = "aa";
char s4[4] = "aa";
printf("s3==s4 is %d , strcmp(s3,s4) is %d
", s3 == s4, strcmp(s3, s4));
// strncmp(s1,s2,length) 对字符串前len个字符进行比较
char s5[3] = "aa";
char s6[4] = "aab";
printf("s5==s6 is %d , strcmp(s5,s6) is %d ,strcmp(s5,s6) is %d
",
s5 == s6, strcmp(s5, s6), strncmp(s5, s6, 2));
// strcpy(target,source) 字符串拷贝 ,不检查目标字符串是否溢出
char temp[50];
char greet[15] = "good morning!";
strcpy(temp, greet);
strcpy(temp + strlen(greet), "ok"); // 再追加
printf("after strcpy temp is: %s
", temp);
// strncpy(target,source,n) 检查目标字符串溢出
char target[10];
char source[30] = "what is make you so beautiful";
strncpy(target, source, sizeof(target) - 1);
target[sizeof(target) - 1] = ' '; // 源字符串超出限制,还要手动补
printf("after strncpy target is: %s
", target);
// sprintf(target,format,arg1,arg2...) 格式化输出到字符串
char brief[50];
sprintf(brief, "I am %d years old ,my name is %s", 24, "qianqian.sun");
printf("after sprintf brief is: %s
", brief);
// 其他字符串函数
// char *strchr(const char * s , int c); 返回一个指向s中存放字符c的第一个位置的指针,若没有找到,返回空指针
// cahr *strpbrk(const char * s1 ,const char * s2); 返回一个指针,指向s1中存放s2中任何字符串的第一个位置。
// char *strrchr(const char * s ,int c);返回一个指针,指向字符串s中字符c最后一次出现的地方;
// cahr *strstr(const char * s1,const char * s2);返回指针,指向s1中第一次出现s2的地方。
// atoi(char * s) 字符串转整数
// atof() atol() strtol() strtoul() strtod()字符串转换为数字 使用sprintf转换为字符串
return 0;
}