C语言之长见识了(函数和一些不常见类型)

1. strstr

在字符串 haystack 中查找第一次出现字符串 needle 的位置, 没有返回NULL.

char *strstr(const char *haystack, const char *needle)
  • haystack – 要被检索的 C 字符串。
  • needle – 在 haystack 字符串内要搜索的小字符串。

2. gets

获取一个可以含空格的字符串. 成功返回str, 错误或为空则返回 NULL。

char *gets(char *str)
  • str – 这是指向一个字符数组的指针,该数组存储了 C 字符串。

代码:

#include <stdio.h>
#include <string.h>
int main()
{
    
    
    printf("输入字符串:\n");
    char str1[100];
    gets(str1);
    char str2[100];
    printf("输入子串:\n");
    gets(str2);

    if (strstr(str1, str2) != NULL)
    {
    
    
        printf(" %s 是 %s 子串\n", str2, str1);
    }
    else
    {
    
    
        printf(" %s 不是 %s 子串\n", str2, str1);
    }

    return 0;
}

运行结果:

在这里插入图片描述

在这里插入图片描述

3. strlen

size_t strlen(const char *str)
  • str – 要计算长度的字符串。

代码:

#include <stdio.h>
#include <string.h>

int main()
{
    
    
    printf("输入字符串:\n");
    char str1[100];
    gets(str1);

    int len = strlen(str1);
    if (len > 0) // 不空
    {
    
    
        printf("str1长度:%d\n", len);
        printf("str1 -> %s\n", str1);
    }
    else // 不空
    {
    
    
        puts("输入字符串为空.");
    }

    return 0;
}

运行结果:

在这里插入图片描述

在这里插入图片描述

4. \r\n

在Windows中:

‘\r’ 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖;

‘\n’ 换行,换到当前位置的下一行,而不会回到行首;

5. const char * 与 char const *

C++标准规定,const关键字放在类型或变量名之前等价的。
so

const char* 等价于 char const*

6. size_t、ssize_t、unsigned char、uint8_t

6.1 size_t、ssize_t

size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数。

  • size_t在32位架构中定义为:typedef unsigned int size_t;

  • size_t在64位架构中被定义为:typedef unsigned long size_t;

  • size_t是无符号的,并且是平台无关的,表示0-MAXINT的范围;int为是有符号的;

ssize_t是有符号整型(signed size_t),在32位机器上等同与int,在64位机器上等同与 long int.

  • %d输出int型;%zu输出size_t型。size_t在库中定义为unsigned int。(一个是整型,一个是无符号整型。)
    unsigned (%u)表示无符号。 电脑是二进制存储,无符号就是没有正负号,所以存储的数据是没有符号位的。

补充:如果%zu不能使用,可以用%u取代。%zu不能输出负数。

#include <stdio.h>
#include <string.h>

int main()
{
    
    
    int num = 5;
    size_t len = sizeof(num);
    printf("size_t len = %zu\n", len);
    printf("size_t len = %u\n", len);

    return 0;
}

6.2 unsigned char

char 和 short / int / long 都是整型. unsigned char和char 都是一个字节长度(8bit), 它们唯一的不同就是unsigned char 没有最高位的符号位.

6.3 uint8_t / uint16_t / uint32_t / uint64_t

这都是使用typedef给类型起得别名。

1字节 uint8_t

2字节 uint16_t

4字节 uint32_t

8字节 uint64_t

7. memcpy

void *memcpy(void *str1, const void *str2, size_t n)
  • str1 – 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
  • str2 – 指向要复制的数据源,类型强制转换为 void* 指针。
  • n – 要被复制的字节数。
#include <stdio.h>
#include <string.h>

int main()
{
    
    
    char *str = "0123456789";
    char str2[20];
    memcpy(str2, str, strlen(str) + 1);
    printf("str2 -> %s\r\n", str2);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_46372074/article/details/127055488