- 论坛徽章:
- 0
|
我写了一段代码来演示一下如何使用strtok_r。代码很简单,有很多东西没有考虑。所以使用的时候要小心  - #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #define MAX_WORD_COUNT 20
- #define MAX_WORD_SIZE 20
- int main()
- {
- char str[] = "name1=value1&name2=value2&name3=value3&name4=value4&name5=value5&name6=value6&name7=value7&name8=value8";
- char *delim = "&";
- char *argName[8];
- char *argValue[8];
- char *strtmp;
- char *saveptr;
- char *tok;
- int i;
- int n;
- char words[MAX_WORD_COUNT][MAX_WORD_SIZE]; // 定义一个字符数组来保存分割后的字符串
- memset(words, 0, sizeof(words));
- /* 复制源字符串,因为 strtok/strtok_r 函数会修改源字符串
- */
- strtmp = strdup(str);
- if (strtmp == NULL) {
- return -1;
- }
- // 获得第一个子串
- n = 0;
- tok = strtok_r(strtmp, delim, &saveptr);
- if (tok == NULL) {
- return -2;
- }
- strncpy(words[n], tok, MAX_WORD_SIZE); //复制子串到words数组
- n++;
- // 循环获得其他子串
- do {
- tok = strtok_r(NULL, delim, &saveptr);
- if (tok == NULL) {
- break;
- }
- strncpy(words[n], tok, MAX_WORD_SIZE);
- n++;
- } while (n < MAX_WORD_COUNT);
- //for (i = 0; i < 8; i++) {
- // printf("words[%d]: %s\n", i, words[i]);
- //}
- // 分割 Name 与 Value
- // 注意:分割后,argName[]与 argValue[]只是保存了一个字符串指针,真正的字符串保存在words数组里面!!!
- delim = "=";
- for (i = 0; i < 8; i++) {
- argName[i] = strtok_r(words[i], delim, &saveptr);
- argValue[i] = strtok_r(NULL, delim, &saveptr);
- }
- // 打印输出结果
- for (i = 0; i < 8; i++) {
- printf("argName[%d]: %s, argValue[%d]: %s\n", i, argName[i], i, argValue[i]);
- }
- free(strtmp);
- return 0;
- }
复制代码 |
|