收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
strcat_s(str, "strings ");
strcat_s(str, "are ");
strcat_s(str, “concatenated.”);*/ //使用跟安全的函数
puts(str);
system(“pause”);
return 0;
}
### (2)strncat函数
介绍:将源的第一个num字符附加到目标,以及一个终止的空字符。
如果源中的char字符串的长度小于num,则只复制到终止空字符之前的内容。
#include
using namespace std;
/* strncat example */
#include <stdio.h>
#include <string.h>
int main()
{
char str1[20];
char str2[20];
/strcpy(str1, "To be ");
strcpy(str2, “or not to be”);
strncat(str1, str2, 6);/
strcpy_s(str1, "To be ");
strcpy_s(str2, “or not to be”);
strncat_s(str1, str2, 6); //使用安全类型
puts(str1);
system(“pause”);
return 0;
}
## 3.比较
### (1)memcmp函数
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
解释:将ptr1所指向的内存块的第一个num字节与ptr2所指向的第一个num字节进行比较,如果它们都匹配,则返回0;如果不匹配,则返回与0不同的值,表示哪个值更大。<0,表示ptr1<ptr2;>0,表示ptr1>ptr2;
与strcmp不同,函数在找到null字符后不会停止比较。
#include
using namespace std;
/* memcmp example */
#include <stdio.h>
#include <string.h>
int main()
{
char buffer1[] = “DWgaOtP12df0”;
char buffer2[] = “DWGAOTP12DF0”;
int n;
n = memcmp(buffer1, buffer2, sizeof(buffer1));
if (n>0)
printf("'%s' is greater than '%s'.\n", buffer1, buffer2);
else if (n<0)
printf("'%s' is less than '%s'.\n", buffer1, buffer2);
else
printf("'%s' is the same as '%s'.\n", buffer1, buffer2);
system("pause");
return 0;
}
### (2)strcmp函数
int strcmp ( const char * str1, const char * str2 );
解释:比较char字符串str1和char字符串str2。
这个函数开始比较每个字符串的第一个字符。如果它们彼此相等,它将继续执行以下对,直到字符不同或到达终止的空字符为止。
这个函数执行字符的二进制比较。对于考虑特定于地区的规则的函数,请参见strcoll。
返回值:0表示str1 = str2;<0 str1<str2 ; >0 str1 > str2;
#include
using namespace std;
#include <stdio.h>
#include <string.h>
int main() //输入apple时跳出循环
{
char key[] = “apple”;
char buffer[80];
do
{
printf(“Guess my favorite fruit? “);
fflush(stdout);
scanf(”%79s”, buffer);
} while (strcmp(key, buffer) != 0);
puts(“Correct answer!”);
system(“pause”);
return 0;
}
### (3)strcoll函数
int strcoll ( const char * str1, const char * str2 );
解释:将C字符串str1与C字符串str2进行比较,两者都根据当前选择的C语言环境的LC\_COLLATE类别进行适当解释。
这个函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续使用下面的一对,直到字符不同,或者直到到达表示字符串结束的空字符为止。这个函数的行为取决于所选C语言环境的LC\_COLLATE类别。
### (4)strncmp函数
int strncmp ( const char * str1, const char * str2, size_t num );
解释:将C字符串str1与C字符串str2的num个字符进行比较。
这个函数开始比较每个字符串的第一个字符。如果它们彼此相等,它将继续执行以下对,函数结束条件:(1)直到字符不同,(2)直到到达终止的空字符为止,(3)或者直到两个字符串中的num字符匹配为止。(无论哪个是第一个)
返回值:0表示str1 = str2;<0 str1<str2 ; >0 str1 > str2;
#include
using namespace std;
/* strncmp example */
#include <stdio.h>
#include <string.h>
int main()
{
char str[][5] = { “R2D2” , “C3PO” , “R2A6” };
int n;
puts(“Looking for R2 astromech droids…”);
for (n = 0; n<3; n++)
if (strncmp(str[n], “R2xx”, 2) == 0)
{
printf(“found %s\n”, str[n]);
}
system(“pause”);
return 0;
}
### (5)strxfrm函数
size_t strxfrm ( char * destination, const char * source, size_t num );
解释:根据当前语言环境转换源指向的char字符串,并将转换后的字符串的第一个num字符串复制到目标,返回其长度。
另一种方法是,通过为目标指定一个空指针,为num指定一个零,该函数只能用于检索长度。
目标指针和源指针不能重叠。
#include
using namespace std;
/* strncmp example */
#include <stdio.h>
#include <string.h>
int main()
{
char str[][5] = { “R2D2” , “C3PO” , “R2A6” };
int n;
puts(“Looking for R2 astromech droids…”);
n = strxfrm(NULL, str[0], 0);
cout << n << endl;//str[0] 的字符串长度为 n + 1
system(“pause”);
return 0;
}
### 搜索:
### (1)memchr函数
const void * memchr ( const void * ptr, int value, size_t num );
void * memchr ( void * ptr, int value, size_t num );
解释:在 ptr 所指向的内存块的第一个num字节中搜索第一次出现 value (被解释为无符号字符),并返回一个指向它的指针。
ptr数组上选中每个字节 和 value 都被解释为 unsigned char,来进行比较。
#include
using namespace std;
/* memchr example */
#include <stdio.h>
#include <string.h>
int main() //寻找str中的p位置
{
char * pch;
char str[] = “Example string”;
pch = (char*)memchr(str, ‘p’, strlen(str));
if (pch != NULL)
printf(“‘p’ found at position %d.\n”, pch - str + 1);
else
printf(“‘p’ not found.\n”);
system(“pause”);
return 0;
}
### (2)strchr函数
const char * strchr ( const char * str, int character );
char * strchr ( char * str, int character );
介绍:返回:character在 str第一次出现的地方。
终止的空字符被认为是 char 字符串的一部分。 因此,它也可以被定位以检索指向字符串结尾的指针。
#include
using namespace std;
/* strchr example */
#include <stdio.h>
#include <string.h>
int main() // 输出str中所有s的位置。
{
char str[] = “This is a sample string”;
char * pch;
printf(“Looking for the ‘s’ character in “%s”…\n”, str);
pch = strchr(str, ‘s’);
while (pch != NULL)
{
printf(“found at %d\n”, pch - str + 1);
pch = strchr(pch + 1, ‘s’);
}
system(“pause”);
return 0;
}
### (3)strcspn函数
size_t strcspn ( const char * str1, const char * str2 );
介绍:扫描str1以查找第一次出现任何字符属于str2,并返回在第一次出现之前读取的str1的字符数。
搜索包括终止空字符。 因此,如果在str1中找不到str2的任何字符,函数将返回str1的长度。
#include
using namespace std;
/* strcspn example */
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = “fcba73”;
char keys[] = “1234567890”;
int i;
i = strcspn(str, keys);
printf(“The first number in str is at position %d.\n”, i + 1);
system("pause");
return 0;
}
### (4)strpbrk函数
const char * strpbrk ( const char * str1, const char * str2 );
char * strpbrk ( char * str1, const char * str2 );
介绍:返回str1中第一个出现在str2中的任何字符的指针,如果没有匹配(即str1中不含有str2中的任何字符),则返回空指针。
搜索不包括任何字符串的终止空字符,但在那里结束。
#include
using namespace std;
/* strpbrk example */
#include <stdio.h>
#include <string.h>
int main() //测试str 中出现 key 中字符的情况 i i a a e i
{
char str[] = “This is a sample string”;
char key[] = “aeiou”;
char * pch;
printf(“Vowels in ‘%s’: “, str);
pch = strpbrk(str, key);
while (pch != NULL)
{
printf(”%c “, *pch);
pch = strpbrk(pch + 1, key);
}
printf(”\n”);
system(“pause”);
return 0;
}
### (5)strrchr函数
const char * strrchr ( const char * str, int character );
char * strrchr ( char * str, int character );
介绍:返回character 在str 最后一次出现的指针。
终止空字符被认为是 char 字符串的一部分。 因此,它也可以位于检索指向字符串结尾的指针。
#include
using namespace std;
/* strrchr example */
#include <stdio.h>
#include <string.h>
int main() //输出s在str中最后一次出现的位置
{
char str[] = “This is a sample string”;
char * pch;
pch = strrchr(str, ‘s’);
printf(“Last occurence of ‘s’ found at %d \n”, pch - str + 1);
system(“pause”);
return 0;
}
### (6)strspn函数
size_t strspn ( const char * str1, const char * str2 );
介绍:返回str2包含的字符在str1中出现过多少次。
搜索不包括任何字符串的终止空字符,但在那里结束。
#include
using namespace std;
/* strspn example */
#include <stdio.h>
#include <string.h>
int main()
{
int i;
char strtext[] = “129th”;
char cset[] = “1234567890”;
i = strspn(strtext, cset);//strtext中1 2 9来自cset
printf("The initial number has %d digits.\n", i);
system("pause");
return 0;
}
### (7)strstr函数
const char * strstr ( const char * str1, const char * str2 );
char * strstr ( char * str1, const char * str2 );
介绍:返回str1中第一次出现str2的指针,如果str2不是str1的一部分,则返回空指针。
匹配过程不包括终止空字符,但它停在那里。
#include
using namespace std;
/* strstr example */
#include <stdio.h>
#include <string.h>
int main() //用sample 替换 simple
{
char str[] = “This is a simple string”;
char * pch;
pch = strstr(str, “simple”);
strncpy(pch, “sample”, 6);
puts(str);
system(“pause”);
return 0;
}
### (8)strtok函数
char * strtok ( char * str, const char * delimiters );
介绍:将字符串拆分为令牌,对此函数的一系列调用将str分割为令牌,这些有delimiters中的任意部分分隔成一系列令牌。
在第一次调用时,函数需要一个C字符串作为str的参数,其第一个字符用作扫描令牌的起始位置。 在随后的调用中,函数需要一个空指针,并将最后一个标记结束后的位置用作新的扫描起始位置。
为了确定一个标记的开始和结束,函数首先从delimiters中不包含的第一个字符的起始位置开始扫描(这成为标记的开始)。 然后从delimiters的第一个字符的标记开始扫描,这将成为标记的结尾。 如果找到终止空字符,扫描也会停止。
该标记的这一端自动被一个空字符替换,并且该标记的开始由该函数返回。
一旦在strtok的调用中发现了str的终止空字符,则对此函数的所有后续调用(使用空指针作为第一个参数)将返回一个空指针。
找到最后一个标记的位置由函数内部保存,以便在下次调用时使用(不需要特定的库实现来避免数据竞争)。
#include
using namespace std;
/* strtok example */
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = “- This, a sample string.”;
char * pch;
printf(“Splitting string “%s” into tokens:\n”, str);
pch = strtok(str, " ,.-“);
while (pch != NULL)
{
printf(”%s\n", pch);
pch = strtok(NULL, " ,.-");
}
/*char str[] = "- This, a sample string."; // 安全类型调试
char * pch;
char* buf;
printf("Splitting string \"%s\" into tokens:\n", str);
pch = strtok_s(str, " ,.-",&buf);
printf("%s\n", pch);
printf("buf %s\n", buf);
while (pch != NULL)
{
printf("%s\n", pch);
printf("buf %s\n", buf);
pch = strtok_s(NULL, " ,.-", &buf);
}*/
system("pause");
return 0;
}
### 其它
### (1)memset函数
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
strtok_s(str, " ,.-“,&buf);
printf(”%s\n", pch);
printf(“buf %s\n”, buf);
while (pch != NULL)
{
printf(“%s\n”, pch);
printf(“buf %s\n”, buf);
pch = strtok_s(NULL, " ,.-", &buf);
}*/
system(“pause”);
return 0;
}
### 其它
### (1)memset函数
[外链图片转存中…(img-W7A8XFSK-1715865314515)]
[外链图片转存中…(img-DgWdpXuR-1715865314515)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)