strstr_strtok_strerror函数说明及用法解析

2025-04-24 4

strstrstrtokstrerror 函数说明

以下是 C 标准库中三个常用字符串处理函数 strstrstrtokstrerror 的详细说明,包括功能、用法和注意事项。


1. strstr 函数

功能:

strstr 用于在一个字符串中查找另一个字符串的次出现。

函数原型:

char *strstr(const char *haystack, const char *needle);

参数:

  • haystack:要搜索的字符串(大字符串)。
  • needle:要查找的子字符串。

返回值:

  • 如果找到子字符串,返回指向 haystack 中次出现 needle 的指针。
  • 如果未找到,返回 NULL

示例:

```c

include

include

int main() {
const char *str = "Hello, world!";
const char *sub = "world";
char *result = strstr(str, sub);

if (result) {
    printf("Found substring: %s\n", result);
} else {
    printf("Substring not found.\n");
}

return 0;

}
```

输出

Found substring: world!

注意事项:

  • 如果 needle 是空字符串,strstr 返回 haystack
  • 如果 haystackneedleNULL,行为未定义。

2. strtok 函数

功能:

strtok 用于将字符串分割成多个“标记”或“子字符串”,基于指定的分隔符。

函数原型:

char *strtok(char *str, const char *delim);

参数:

  • str
    • 次调用时,传入要分割的字符串。
    • 后续调用时,传入 NULL,表示继续分割上一次调用后的剩余部分。
  • delim:分隔符字符串,表示用哪些字符作为分隔标记。

返回值:

  • 返回指向下一个标记的指针。
  • 如果没有更多标记,返回 NULL

示例:

```c

include

include

int main() {
char str[] = "Hello,world,this,is,C";
const char delim[] = ",";
char *token;

token = strtok(str, delim);
while (token != NULL) {
    printf("Token: %s\n", token);
    token = strtok(NULL, delim);
}

return 0;

}
```

输出

Token: Hello
Token: world
Token: this
Token: is
Token: C

注意事项:

  • strtok 会修改原字符串,将分隔符替换为 \0
  • strtok 不是线程安全的。如果需要线程安全版本,可以使用 strtok_r(POSIX 标准)。
  • 如果在次调用时传入 NULL,行为未定义。

3. strerror 函数

功能:

strerror 用于将错误码(errno 的值)转换为对应的错误消息字符串。

函数原型:

char *strerror(int errnum);

参数:

  • errnum:错误码,通常是由库函数设置的全局变量 errno 的值。

返回值:

  • 返回指向错误消息字符串的指针。

示例:

```c

include

include

include

int main() {
FILE *file = fopen("nonexistent.txt", "r");
if (!file) {
printf("Error: %s\n", strerror(errno));
}

return 0;

}
```

输出(假设文件不存在):

Error: No such file or directory

注意事项:

  • strerror 返回的指针指向静态内存中的数据,下次调用网络或库函数时可能会被覆盖。如果需要长期保存错误消息,应将其复制到其他缓冲区。
  • 错误码应在调用 strerror 前保存,因为某些库函数可能会修改 errno

对比

| 函数 | 功能 | 是否修改原字符串 | 线程安全 | 典型用途 |
|------------|-------------------------------|------------------|----------|------------------------------|
| strstr | 查找子字符串 | 否 | 是 | 字符串搜索 |
| strtok | 分割字符串 | 是 | 否 | 字符串解析、标记化 |
| strerror | 将错误码转换为错误消息 | 否 | 是 | 错误处理、调试 |


注意事项

  1. strstr

    • 适用于简单的子字符串查找。
    • 不会修改原字符串。
  2. strtok

    • 适用于分割字符串,但会修改原字符串。
    • 不适合多线程环境,推荐使用 strtok_r
  3. strerror

    • 适用于错误码到错误消息的转换。
    • 返回的字符串指针指向静态内存,需小心使用。

希望以上说明对你理解这三个函数有所帮助!

// 来源:https://www.nzw6.comImage

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

源码下载