这样做确保存储的是一个字符串 。如果目标空间能容纳源字符串的副本 , 那么从源字符串拷贝的空字符便是该副本的结尾;如果目标空间装不下副本 , 则把副本最后一个元素设置为空字符 。
6 sprintf()函数sprintf()函数声明在stdio.h中 , 而不是在string.h中 。该函数和printf()类似 , 但是它是把数据写入字符串 , 而不是打印在显示器上 。因此 , 该函数可以把多个元素组合成一个字符串 。sprintf()的第1个参数是目标字符串的地址 。其余参数和printf()相同 , 即格式字符串和待写入项的列表 。
程序format.c中的程序用sprintf()把3个项(两个字符串和一个数字)组合成一个字符串 。注意 , sprintf()的用法和printf()相同 , 只不过sprintf()把组合后的字符串存储在数组formal中而不是显示在屏幕上 。
/* format.c -- format a string */#include <stdio.h>#define MAX 20char * s_gets(char * st, int n);int main(void){char first[MAX];char last[MAX];char formal[2 * MAX + 10];double prize;puts("Enter your first name:");s_gets(first, MAX);puts("Enter your last name:");s_gets(last, MAX);puts("Enter your prize money:");scanf("%lf", &prize);sprintf(formal, "%s, %-19s: $%6.2fn", last, first, prize);puts(formal);return 0;}char * s_gets(char * st, int n){char * ret_val;int i = 0;ret_val = fgets(st, n, stdin);if (ret_val){while (st[i] != 'n' && st[i] != '0')i++;if (st[i] == 'n')st[i] = '0';else // must have words[i] == '0'while (getchar() != 'n')continue;}return ret_val;}下面是该程序的运行示例:
Enter your first name:sprintf()函数获取输入 , 并将其格式化为标准形式 , 然后把格式化后的字符串存储在formal中 。
Annie
Enter your last name:
von Wurstkasse
Enter your prize money:
25000
von Wurstkasse, Annie : $25000.00
7 其他字符串函数ANSI C库有20多个用于处理字符串的函数 , 下面总结了一些常用的函数 。
char *strcpy(char * restrict s1, const char * restrict s2);该函数把s2指向的字符串(包括空字符)拷贝至s1指向的位置 , 返回值是s1 。char *strncpy(char * restrict s1, const char * restrict s2, size_t n);该函数把s2指向的字符串拷贝至s1指向的位置 , 拷贝的字符数不超过n , 其返回值是s1 。该函数不会拷贝空字符后面的字符 , 如果源字符串的字符少于n个 , 目标字符串就以拷贝的空字符结尾;如果源字符串有n个或超过n个字符 , 就不拷贝空字符 。/* compback.c -- strcmp returns */#include <stdio.h>#include <string.h>int main(void){printf("strcmp("A", "A") is ");printf("%dn", strcmp("A", "A"));printf("strcmp("A", "B") is ");printf("%dn", strcmp("A", "B"));printf("strcmp("B", "A") is ");printf("%dn", strcmp("B", "A"));printf("strcmp("C", "A") is ");printf("%dn", strcmp("C", "A"));printf("strcmp("Z", "a") is ");printf("%dn", strcmp("Z", "a"));printf("strcmp("apples", "apple") is ");printf("%dn", strcmp("apples", "apple"));return 0;}该函数把s2指向的字符串拷贝至s1指向的字符串末尾 。s2字符串的第1个字符将覆盖s1字符串末尾的空字符 。该函数返回s1 。char *strncat(char * restrict s1, const char * restrict s2, size_t n);该函数把s2字符串中的n个字符拷贝至s1字符串末尾 。s2字符串的第1个字符将覆盖s1字符串末尾的空字符 。不会拷贝s2字符串中空字符和其后的字符 , 并在拷贝字符的末尾添加一个空字符 。该函数返回s1 。 int strcmp(const char * s1, const char * s2);如果s1字符串在机器排序序列中位于s2字符串的后面 , 该函数返回一个正数;如果两个字符串相等 , 则返回0;如果s1字符串在机器排序序列中位于s2字符串的前面 , 则返回一个负数 。int strncmp(const char * s1, const char * s2, size_t n);该函数的作用和strcmp()类似 , 不同的是 , 该函数在比较n个字符后或遇到第1个空字符时停止比较 。char *strchr(const char * s, int c);如果s字符串中包含c字符 , 该函数返回指向s字符串首次出现的c字符的指针(末尾的空字符也是字符串的一部分 , 所以在查找范围内);如果在字符串s中未找到c字符 , 该函数则返回空指针 。
推荐阅读
- C语言的自定义输入和输出的三种方法
- 旧硬盘应该如何处理,阿卡西斯的这款雷电3硬盘盒给出了答案
- 编写C程序控制LED
- 还不知道MySQL怎么给字符串加索引?
- C语言的指针与多维数组
- 架构大更新的英特尔Rocket Lake处理器可将频率提升至5.0GHz
- 被蛇咬伤的处理方法 被蛇咬伤应该怎么处理?
- 使用pandas处理时间变量
- C语言的数组的构建与打印
- 驾考5次不过咋处理?
