如何使用二级指针保存从strtok中截取得字符串
时间: 2023-08-14 21:06:04 浏览: 41
在使用 `strtok` 函数截取字符串时,我们可以使用二级指针来保存每个被截取出来的子串。具体的方法如下:
1. 定义一个 char 类型的二级指针变量,用于保存截取出来的子串;
```
char **substrings;
```
2. 使用 `malloc` 函数为二级指针分配内存,分配的大小为截取出来的子串的个数;
```
substrings = (char **)malloc(sizeof(char *) * substrings_count);
```
3. 在截取字符串的循环中,将每个被截取出来的子串保存到二级指针中,可以使用 `strcpy` 函数将子串复制到二级指针指向的内存地址中;
```
int i = 0;
char *token = strtok(str, delimiter);
while (token != NULL) {
substrings[i] = (char *)malloc(sizeof(char) * (strlen(token) + 1));
strcpy(substrings[i], token);
token = strtok(NULL, delimiter);
i++;
}
```
4. 最后记得释放每个子串的内存和二级指针的内存;
```
for (int i = 0; i < substrings_count; i++) {
free(substrings[i]);
}
free(substrings);
```
相关问题
c语言将多个单词从字符串中提取出来并保存不用strtok
可以使用循环和指针的方法来实现:
```c
#include <stdio.h>
void extract_words(const char* str) {
const char* start = str; // 指向当前单词的开头
const char* end; // 指向当前单词的结尾
while (*start != '\0') { // 循环直到字符串结尾
while (*start == ' ') {
start++; // 跳过空格
}
end = start;
while (*end != ' ' && *end != '\0') {
end++; // 找到单词结尾
}
if (start != end) { // 如果单词不为空
char word[end - start + 1]; // 保存单词的数组
for (int i = 0; i < end - start; i++) {
word[i] = *(start + i); // 拷贝单词到数组中
}
word[end - start] = '\0'; // 末尾添加字符串结束符
printf("%s\n", word); // 输出单词
}
start = end; // 指向下一个单词的开头
}
}
int main() {
char str[] = "C语言 是 一种 通用 的 高级 语言";
extract_words(str);
return 0;
}
```
输出结果:
```
C语言
是
一种
通用
的
高级
语言
```
strtok获取第二个字符串
使用strtok函数获取第二个字符串的步骤如下:
1. 在调用strtok函数前,先定义一个字符指针变量用于接收返回的分割后的字符串。
2. 将要分割的字符串作为第一个参数传入strtok函数。
3. 将分隔符字符串作为第二个参数传入strtok函数。
4. 在第一次调用strtok函数时,传入要分割的字符串作为参数,并将返回值赋给定义的字符指针变量。
5. 在接下来的调用中,传入NULL作为参数,以便继续在同一个字符串上进行分割。
6. 每次调用strtok函数后,字符指针变量将指向下一个分割后的字符串。
下面是一个示例代码:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World! This is a test.";
char *delim = ", ";
char *token = strtok(str, delim);
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, delim);
}
return 0;
}
输出结果为:
Hello
World!
This
is
a
test.
这段代码中,使用strtok函数将字符串str按照逗号和空格进行分割,并依次打印出分割后的字符串。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [strtok函数](https://blog.csdn.net/mikewu_helloworld/article/details/53378898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [C语言:strtok函数小结](https://blog.csdn.net/u013619856/article/details/19005831)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)