第十一章 字符串和指针
11-1 字符串和指针
11-2 通过指针操作字符串
11-3 字符串处理库函数
代码清单 11- 1
//用数组实现的字符串和用指针实现的字符串
#include<stdio.h>
int main(void)
{
char str[] = "ABC";//用数组实现的字符串
char *ptr = "123";//用指针实现的字符串
/*在操作字符串面量是我,其数据类型指向
char型变量的指针,指向的是该字符串
字面量的第一个字符 */
printf("str = \"%s\"\n", str);
printf("ptr = \"%s\"\n", ptr);
return (0);
}
代码清单 11- 2
//用数组实现的字符串和用指针实现的字符串相同点
#include<stdio.h>
int main(void)
{
int i;
char str[] = "ABC";
char *ptr = "123";
for (i = 0; str[i]; i++)
putchar(str[i]); //str[i]是第一个元素之后的第i个元素
putchar('\n');
for(i = 0; ptr[i]; i++)
putchar(ptr[i]); //ptr[i]是第一个字符之后的第i个元素
putchar('\n');
printf("str = \"%s\"\n", str);//str是指向第14个字符的指针
printf("ptr = \"%s\"\n", ptr);//ptr是指向第1个字符的指针
return (0);
}
代码清单 11- 3
//字符串赋值(?)
#include<stdio.h>
int main(void)
{
char str[] = "ABC";
char *ptr = "123";
str = "DEF"; //错误:不能这样赋值
ptr = "456"; /*正确:指向另一个字符串字面量*/
printf("str = \"%s\"\n", str);
printf("pyt = \"%s\"\n", ptr);
return (0)
}
代码清单 11- 4
//用数组实现字符串和用指针实现的字符串(其二)
#include<stdio.h>
int main(void)
{
char str[6] = "ABC"; //用数组实现的字符串
char *ptr = "123"; //用指针实现的字符串
printf("str = \"%s\"\n", str);
printf("ptr = \"%s\"\n", ptr);
return (0);
}
代码清单 11- 5
//用“数组实现的字符串”的数组和“用指针实现的字符串”的数组
#include <stdio.h>
int main(void)
{
int i;
char st[3][6] = {
"Turbo", "NA", "DOHC"};
char *pt[3] = {
"12345", "12", "1234"};
for (i = 0; i < 3; i++)
printf("st[%d] = \"%s\"\n", i, st[i]);
for(i = 0; i < 3; i++)
printf("pt[%d] = \"%s\"\n", i, pt[i]);
return (0);
}
代码清单 11- 6
//判断字符串的长度(指针版)
#include <stdio.h>
//---返回字符串s的长度---
size_t str_length(const char *s)
{
size_t len = 0;
while (*s++)
len++;
return (len);
}
int main(void)
{
char st[100];
printf("请输入字符串:");
scanf("%s", st);
printf("字符串%s的长度为%u。\n", st, (unsigned)str_length(st));
return (0);
}
代码清单 11- 7
//复制字符串
#include <stdio.h>
//---将字符串s复制到d---
char *str_copy(char *d, const char *s)
{
char *t = d;
while (*d++ = *s++)
;
return (t);
}
int<