strlen
計算字符串長度
size_t strlen(const char *str)
計算字符串 str 的長度,直到空結束字符,但不包括空結束字符。
函數實現:
int Strlen(const char *str)
{
assert(str);
int len = 0;
while ((*str++) != '\0')len++;
return len;
}
strcpy
字符串復制
char *strcpy(char *dest, const char *src)
把 src 所指向的字符串復制到 dest。
函數實現:
char *Strcpy(char *dst, const char *src)
{
assert(dst && src);
char *tmp = dst;
while ((*dst++ = *src++) != '\0');
return tmp;
}
strncpy
復制連續的n個字符
char *strncpy(char *dest, const char *src, size_t n)
把 src 所指向的字符串復制到 dest,最多復制 n 個字符。
函數實現:
char *Strncpy(char *dst, const char *src, int len)
{
assert(dst&&src);
char *tmp = dst;
int offset = 0;
if (len > strlen(src))
{
offset = len - strlen(src);
len = strlen(src);
}
while (len--)
{
*dst++ = *src++;
}
while (offset--)
{
*dst++ = '\0';
}
return tmp;
}
strcat
把一個字符串連接到另一個字符串后面
char *strcat(char *dest, const char *src)
把 src 所指向的字符串追加到 dest 所指向的字符串的結尾。
函數實現:
char *Strcat(char *dst, const char* src)
{
assert(dst && src);
char *tmp = dst;
while (*dst++);
dst--;
while (*dst++ = *src++);
return tmp;
}
strncat
把連續的n個字符連接到另一個字符串后面
char *strncat(char *dest, const char *src, size_t n)
把 src 所指向的字符串追加到 dest 所指向的字符串的結尾,直到 n 字符長度為止。
函數實現:
char *Strncat(char *dst, const char* src, int len)
{
assert(dst && src);
char *tmp = dst;
while (*dst++);
dst--;
while (len--)
{
*dst++ = *src++;
}
*dst = '\0';
return tmp;
}
示例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char str0[20] = "Test:";
char str1[20] = "Welcome9999";
char str2[20] = " To ";
char str3[20] = "0123Beijing55";
char tmp[100];
strcpy(tmp, str0);
puts(tmp); //Test:
strncpy(tmp, str1, 7); //取st1前7個字符
puts(tmp); //Welcome
strcat(tmp, str2); //連接str2
puts(tmp);
strncat(tmp, str3 + 4, 7); //取str3+4之后的7個字符
puts(tmp);
return 0;
}
輸出結果:
strchr
查找某字符在字符串中首次出現的位置指針,如果不存在則返回NULL
char *strchr(const char *str, int c)
在參數 str 所指向的字符串中搜索第一次出現字符 c(一個無符號字符)的位置。
函數實現:
char* My_strchr(char *s, char c)
{
while(*s != '\0' && *s != c)
{
++s;
}
return *s==c ? s : NULL;
}
示例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char string[20] = "This is a string";
char *ptr1, *ptr2;
char c1 = 'r', c2 = 'b';
ptr1 = strchr(string, c1);
ptr2 = strchr(string, c2);
if(ptr1)
printf("字符1:%c 的位置是: %s \n",c1,ptr1);
else
printf("字符1:%c 未找到 \n", c1);
if(ptr2)
printf("字符2:%c 的位置是: %s \n",c2,ptr2);
else
printf("字符2:%c 未找到 \n", c2);
return 0;
}
輸出結果:
strcmp
字符串比較
int strcmp(const char *str1, const char *str2)
把 str1 所指向的字符串和 str2 所指向的字符串進行比較。
設這兩個字符串為str1,str2,
若str1=str2,則返回零;
若str1<str2,則返回負數;
若str1>str2,則返回正數。
函數實現:
int Strcmp(char const *s1, char const *s2)
{
assert(s1&&s2);
while (*s1 == *s2 && *s1 != '\0' && *s2 != '\0')
{
s1++;
s2++;
}
if (*s1 == *s2)
{
return 0;
}
else if (*s1 > *s2)
{
return 1;
}
return -1;
}
示例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char str1[20] = "abc";
char str2[20] = "abc";
char str3[20] = "bbc";
int r1, r2, r3;
r1 = strcmp(str1, str2);
r2 = strcmp(str1, str3);
r3 = strcmp(str3, str1);
printf("r1 = %d, r2 = %d, r3 = %d \n", r1, r2, r3);
return 0;
}
輸出結果:
strstr
字符串查找
char *strstr(const char *haystack, const char *needle)
在字符串 haystack 中查找第一次出現字符串 needle(不包含空結束字符)的位置。
函數實現:
char *Strstr(char const *s1, char const *s2)
{
assert(s1&&s2);
const char *ps1, *ps2;
ps1 = s1;
ps2 = s2;
while (*ps1)
{
const char *tmp = ps1;
while (*tmp++ == *ps2++);
if (*ps2 == '\0')
{
return (char*)ps1;
}
ps2 = s2;
ps1++;
}
return NULL;
}
strncmp
int strncmp(const char *str1, const char *str2, size_t n)
把 str1 和 str2 進行比較,最多比較前 n 個字節。
函數實現:
int Strncmp(char const *s1, char const *s2, int len)
{
assert(s1&&s2);
while (len-- && *s1 == *s2 && *s1 != '\0' && *s2 != '\0')
{
s1++;
s2++;
}
return *s1 - *s2;
}
memcpy
內存復制
void *memcpy(void *dest, const void *src, size_t n)
從 src 復制 n 個字符到 dest。
函數實現
void *Memcpy(char *dst, char const *src, int len)
{
assert(dst && src);
char *tmp = dst;
const char *s = src;
while (len--)
{
*dst++ = *src;
}
return tmp;
}
Jlink使用技巧系列文章:
- Jlink使用技巧之合並燒寫文件
- Jlink使用技巧之燒寫SPI Flash存儲芯片
- Jlink使用技巧之虛擬串口功能
- Jlink使用技巧之讀取STM32內部的程序
- Jlink使用技巧之單獨下載HEX文件到單片機
- Jlink使用技巧之J-Scope虛擬示波器功能
歡迎大家關注我的個人博客
或微信掃碼關注我的公眾號