·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为输出结果。
要求:以效率最高的方式实现
示例:
image.png

例子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


YingLi
6 声望4 粉丝

From zero to hero.