·snprintf函数本身是可变参数函数,原形如下:
int snprintf(char buffer, int buf_size, const char fomart,...)
分析:当函数只有3个参数时,如果第三个参数没有包含格式化信息,函数调用没有问题;相反,如果第三个参数包含了格式化信息,但缺少后续对应参数,则程序行为不确定。
例子31-1:
`#include"stdio.h"
int main()
{
char buf[10] = {0};
char src[] = "hello DT";
snprintf(buf,sizeof(buf),src,"DT");
printf("buf = %s\n",buf);
return 0;
}`
输出结果:
hello DT
例子32-2:
`#include "stdio.h"
include "string.h"
int main()
{
#define STR "Hello, \0D.T.sofeware\0"
char* src = STR;
char buf[255] = {0};
snprintf(buf , sizeof(buf) , src);
printf("strlen(STR) = %d\n", strlen(STR)); //7
printf("strlen(STR) = %d\n");sizeof(STR)); //22
printf("strlen(src) = %d\n", strlen(src)); //7
printf("strlen(src) = %d\n");sizeof(src)); //4 ,src是个指针
printf("strlen(buf) = %d\n", strlen(buf)); //7
printf("strlen(buf) = %d\n");sizeof(buf)); //255
printf("src = %s\n",src); //Hello
printf("buf = %s\n",buf); //Hello
return 0;
}`
分析:
·字符串相关的函数均以第一个出现的‘0’作为结束符
·编译器总是会在字符串字面量的末尾添加‘0’
·字符串字面量的本质为数组
补充:string函数是字符串比较函数
strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1 = str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
例子31-3:
#include"stdio.h"
#include"string.h"
int main()
{
#define S1 "D.T.Software"
#define S2 "D.T.Software"
if(S1 == S2)
{
printf("Equal\n");
}
else
{
printf("non Equal\n");
}
if(strcmp(S1,S2) == 0)
{
printf("Equal\n");
}
else
{
printf("non Equal\n");
}
}
输出结果:
non Equal
Equal
分析:
·字符串之间的相等比较需要用strcmp完成
·不可直接用==进行字符串直接的比较
·完全相同的字符串字面量的==比较结果为false
不编写依赖特殊编译器的代码!!!!!
·字符串循环右移
void right_shift_r(const char src,char result, unsigned int n);
函数功能:将输入字符串src循环右移n位,result为输出结果。
要求:以效率最高的方式实现
示例:
例子31-4:
`#include "stdio.h"
#include "string.h"
void right_shift_r(const char* src,char* result, unsigned int n)
{
const unsigned int LEN = strlen(src);
int i = 0;
for(i = 0;i < LEN; i ++)
{
result[(n + i) % LEN] = src[i];
}
result[LEN] = '\0';
}
int main()
{
char result[255] = {0};
right_shift_r("abcde",result,2);
printf("%s\n",result);
right_shift_r("abcde",result,5);
printf("%s\n",result);
right_shift_r("abcde",result,8);
printf("%s\n",result);
return 0;
}`
输出结果:
deabc
abcde
cdeab
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。