总的来说,有两种思路。
uint8_t str[10] = {0};
int arr[] = {1,2,3,4,5,6};
sprintf(str,"%d%d%d%d%d%d",arr[0],arr[1],arr[2],arr[3],arr[4],arr[5]);
printf(str);
这种想法非常局限,是直接使用sprintf(),怎么改进呢?用循环。
uint8_t str[10] = {0};
int arr[] = {1,2,3,4,5,6};
for(uint8_t i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++)
{
sprintf((str + strlen(str)),"%d",arr[i]);
}
这个循环的方式非常巧妙,利用strlen()作为不断增加的变化量,而当str赋初值都是0的时候,这些零对于字符串来说,相当于\0,那么此时strlen检测出来的数量必然是0,这是一种需要记住的方式。
直接使用sprintf()就好了。
uint8_t str[10] = {0};
int num = 25635;
sprintf(str,"%d",num);
printf(str);
这个函数主要是看在一个第一个参数字符串中,是否有第二个参数字符存在。如果存在的话,那么就返回第二个参数字符在第一个参数字符串的数组下标。
这个函数一般来确定有没有某一个字符或者字符串是存在于第一个字符串之中的。
strstr是一个C语言的字符串处理函数,用于在一个字符串中查找指定子字符串的第一次出现位置。
该函数的原型如下:
c
char *strstr(const char *haystack, const char *needle);
haystack:要搜索的字符串,即被查找的源字符串。
needle:要查找的子字符串。
strstr函数会在 haystack 字符串中查找第一次出现的 needle 子字符串,
并返回该子字符串在 haystack 中的指针。如果未找到匹配的子字符串,则返回NULL。
以下是一个使用strstr函数的示例:
c
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
char *result = strstr(str, "World");
if (result != NULL) {
printf("Found at index: %ld\n", result - str);
} else {
printf("Not found\n");
}
return 0;
}
这个函数的主要作用是返回字符串中某一个字符之前的字符串的地址。相当于将前面的字符串切割了下来。
不过值得注意的是:其中的字符串一定要是字符数组。不能是字符串,否则操作会卡住。一定要是直接的数组,不能是数组当做一个*str参数传进来,这样的话数组就改变了性质,这样也会出现问题。
strtok是字符串处理函数,它的名称来自于 "string tokenization" 的缩写。
在C语言中,strtok函数用于将一个字符串分割成多个子字符串(tokens),并逐个返回这些子字符串。它可以根据指定的分隔符将原始字符串切割成多个部分。
strtok函数的原型如下:
c
char *strtok(char *str, const char *delim);
str:要分割的字符串,第一次调用时传入非空指针,后续调用传入NULL。
delim:分隔符字符串,用于指定分割子字符串的标志。
strtok函数首次调用时,会在给定的字符串中找到第一个分隔符之前的子字符串,并返回该子字符串的指针。之后的调用通过传入NULL作为第一个参数,可以继续返回后续的子字符串,直到没有更多的子字符串可供返回。
以下是一个使用strtok函数的示例:
c
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello,World,Welcome";
char *token = strtok(str, ",");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, ",");
}
return 0;
}
第一次传入一个非空的指针,后续就直接传入NULL就可以了。
%hhu表示的是无符号的char,而其中%hu表示的是无符号的short,%u就是表示无符号的int。