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)
代码:
#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;
}
|