#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
// ---------- strlen ----------
char s1[] = "Hello";
printf("strlen(\"%s\") = %zu\n", s1, strlen(s1)); // 5
// ---------- strcpy ----------
char dest1[20];
char src1[] = "Copy me";
printf("strcpy -> %s\n", strcpy(dest1, src1)); // Copy me
// ---------- strncpy ----------
char dest2[20];
char src2[] = "Too long text";
strncpy(dest2, src2, 5);
dest2[5] = '\0'; // 手动添加终止符(否则可能无'\0')
printf("strncpy (5 chars) -> %s\n", dest2); // Too l
// ---------- strcat ----------
char dest3[20] = "Hello";
char src3[] = " World";
printf("strcat -> %s\n", strcat(dest3, src3)); // Hello World
// ---------- strncat ----------
char dest4[20] = "Hello";
char src4[] = " World!";
strncat(dest4, src4, 3);
printf("strncat (3 chars) -> %s\n", dest4); // Hello Wo
// ---------- strcmp ----------
char a[] = "abc", b[] = "abd";
int cmp = strcmp(a, b);
printf("strcmp(\"%s\", \"%s\") = %d\n", a, b, cmp); // 负值(-1常见)
// ---------- strncmp ----------
printf("strncmp(\"%s\", \"%s\", 2) = %d\n", a, b, strncmp(a, b, 2)); // 0(前2个相同)
// ---------- strchr ----------
char str[] = "Hello world";
char *p = strchr(str, 'o');
printf("strchr('o') -> %s\n", p); // o world
// ---------- strrchr ----------
p = strrchr(str, 'o');
printf("strrchr('o') -> %s\n", p); // orld(最后一个'o')
// ---------- strstr ----------
p = strstr(str, "world");
printf("strstr(\"world\") -> %s\n", p); // world
// ---------- strtok ----------
char tokStr[] = "one,two,three";
char *token = strtok(tokStr, ",");
printf("strtok -> ");
while (token) {
printf("%s ", token);
token = strtok(NULL, ",");
}
printf("\n"); // one two three
// ---------- atoi ----------
char num1[] = " 123";
printf("atoi(\"%s\") = %d\n", num1, atoi(num1)); // 123
// ---------- atof ----------
char num2[] = "3.14";
printf("atof(\"%s\") = %f\n", num2, atof(num2)); // 3.140000
// ---------- strtol ----------
char num3[] = "0x1A";
char *end;
long val = strtol(num3, &end, 16);
printf("strtol(\"%s\", NULL, 16) = %ld\n", num3, val); // 26
/*
三个参数:
参数 作用
str 要转换的字符串
endptr 保存转换结束位置的指针
base 数字进制
所以:
long val = strtol(num3, &end, 16);
等价于:
把 num3 按16进制解析成long,并把解析结束的位置保存到end
*/
// ---------- memcpy ----------
char srcMem[] = "Copy me";
char destMem[20];
memcpy(destMem, srcMem, strlen(srcMem) + 1);
printf("memcpy -> %s\n", destMem); // Copy me
// ---------- memset ----------
char fill[10];
memset(fill, 'A', 5);
fill[5] = '\0';
printf("memset -> %s\n", fill); // AAAAA
// ---------- memcmp ----------
char x[] = "abc", y[] = "abd";
int mc = memcmp(x, y, 3);
printf("memcmp(\"%s\", \"%s\", 3) = %d\n", x, y, mc); // 负值
return 0;
}