c语言strstr的函数体
时间: 2023-11-21 07:57:06 浏览: 131
以下是C语言中strstr函数的函数体实现:
```c
char *strstr(const char *str1, const char *str2) {
const char *p1 = str1;
const char *p2 = str2;
const char *p1Adv = str1;
if (*str2 == '\0') {
return (char *)str1;
}
while (*p1Adv != '\0') {
p1 = p1Adv;
p2 = str2;
while (*p1 != '\0' && *p2 != '\0' && *p1 == *p2) {
p1++;
p2++;
}
if (*p2 == '\0') {
return (char *)p1Adv;
}
p1Adv++;
}
return NULL;
}
```
该函数的作用是在字符串str1中查找字符串str2的第一次出现,并返回指向该位置的指针。如果未找到,则返回NULL。
相关问题
c语言字符串的函数
C语言中的字符串是以空字符 `\0` 结尾的字符数组。为了方便对字符串进行各种操作,C标准库提供了一系列常用的字符串处理函数。下面是一些常见的字符串函数及其用途说明:
### 常见的C语言字符串函数
#### 1. 字符串长度计算
- **`strlen(s)`**
- 功能:返回字符串 `s` 的实际长度(不包括结尾的空字符)。
- 示例:
```c
char str[] = "hello";
size_t len = strlen(str); // 返回5
```
#### 2. 字符串复制
- **`strcpy(dest, src)`**
- 功能:将源字符串 `src` 复制到目标字符串 `dest` 中,并添加终止符 `\0`。
- 注意事项:确保 `dest` 具有足够的空间容纳来自 `src` 的所有字符加结束标记。
- 示例:
```c
char source[] = "Hello World!";
char destination[50];
strcpy(destination, source);
printf("%s\n", destination); // 输出: Hello World!
```
#### 3. 安全字符串复制 (防止溢出)
- **`strncpy(dest, src, n)`**
- 功能:从 `src` 最多复制 `n` 个字节的数据到 `dest` 。如果 `src` 长度小于 `n` ,则会补足剩余的空间为零直到达到指定数目为止;否则不会自动加上 '\0' 结束标志。
- 使用建议:通常最好在最后手动设置 `dest[n] = '\0';` 来保证安全性和完整性。
#### 4. 字符串连接
- **`strcat(dest, src)`**
- 功能:把 `src` 拼接到 `dest` 后面,并保持原样地追加分隔后的两个串之间的单个 null 终止符。
- 警告:同样需要注意目的缓冲区是否有足够大小存放新生成的整体文本序列。
- 示例:
```c
char s1[80]="I love ";
strcat(s1,"programming.");
puts(s1); /* 打印“I love programming.” */
```
#### 5. 安全字符串连接
- **`strncat(dest, src, n)`**
- 功能:最多拼接 `n` 个来自 `src` 的字符至 `dest` 尾部。最终也会以null终结整个新的组合体。
#### 6. 字符串比较
- **`strcmp(s1, s2)`**
- 功能:逐个字符对比两段文字直至遇到第一个不同之处或到达任意一个尽头处停止检查。若完全匹配,则返回值等于零;当左边大于右边时给出正值;反之亦然负数表示前者较小的情况。
- 示例:
```c
int result = strcmp("apple","banana");
if(result == 0){
puts("Strings are equal");
} else {
puts("Strings differ");
}
```
#### 7. 查找子串位置
- **`strstr(haystack, needle)`**
- 功能:搜索第一次出现于主串内的模式片段的位置信息。它要么指向发现的目标起始点地址要么就是NULL代表没找到对应项。
- 应用场景举例:可用于解析配置文件里的特定标识、过滤网络协议报文的关键字段提取等工作场合里边。
---
阅读全文
相关推荐














