字符串输入
gets函数,构造为 char *gets(char * s)
, 不足是不检查预留存储区是否能够容纳你实际输入数据,多出则溢出。
#include <stdio.h> #define MAX 80 int main() { char name[MAX]; char *ptr; printf("What's your name?\n"); ptr = gets(name); printf("Hello , %s!\n" , name); return 0; }
fget函数,避免溢出问题,第二个参数指定获取的长度,第三个参数为获取来源,可以是文件或标准输入。
#include <stdio.h> #define MAX 10 int main() { char name[MAX]; char *ptr; printf("What's your name?\n"); ptr = fgets(name, MAX, stdin); printf("Hello , %s! , my firend %s!\n", 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?\n"); count = scanf("%5s %10s", name, gf_name); printf("Hello %d, , %s! , your girl friend is %s!\n", 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\n"); fputs(beauty, stdout); puts("\n"); printf("foramt output is %s \n", "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\n"; char hi[120] = "ni hao a xiaohui !"; // strlen 函数 字符个数,不包括 结束标志 printf("length of beauty is %d , sizeof is %d \n", strlen(beauty), sizeof(beauty)); *(beauty + 3) = 'r';// 修改字符串 printf(beauty); // strcat(s1,s2) 向s1添加s2 , s1可能溢出 printf("strcat add = %s \n", strcat(hi, beauty)); // strncat(s1,s2,max) 向s1添加s2 指定添加的长度 char s1[5] = "hi"; char s2[10] = "hi boy"; printf("strncat add = %s \n", 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 \n", 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 \n", \ 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 \n", 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] = '\0'; // 源字符串超出限制,还要手动补 \0 printf("after strncpy target is: %s \n", 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 \n", 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; }
来源:https://www.cnblogs.com/hiqianqian/p/6823219.html