C 语言中 strtok(x,y)函数 使用中的null参数有关问题
C 语言中 strtok(x,y)函数 使用中的null参数问题
关于strtok的使用说明如下:
“第一个参数x指定一个字符串,它包含零个或者多个y中一个或者多个分隔符分隔的标记。strtok找到str的下一个标记,并将其用NUL结尾,然后返回一个指向这个标记的指针。”
首先,nul是字符串结束符“\0”,用于结束字符串的;null是表示空指针,即没有具体指向的指针。
第一执行strtok(x,y)(假设y指向空格),则在x指向的字符串的第一个空格被改为 \0(设此处为a处),且返回一个指向该nul的指针。然后再次执行strtok(null,y),问题:
1. 此时指针从a处开始接着往下找下一个空格?按照strtok的定义说明,此时它应该从他的第一个参数开始,即从null开始,那这个null是个空指针,是如何确定从哪里开始找的呢?注:上面的设置是设为nul而非null。
2. 如果在指针向下查找y的过程中,遇到nul即\0,则说明此时已经到达x指向的字符串结尾,结束查找,是吗?
谢谢!
------解决方案--------------------
关于strtok的使用说明如下:
“第一个参数x指定一个字符串,它包含零个或者多个y中一个或者多个分隔符分隔的标记。strtok找到str的下一个标记,并将其用NUL结尾,然后返回一个指向这个标记的指针。”
首先,nul是字符串结束符“\0”,用于结束字符串的;null是表示空指针,即没有具体指向的指针。
第一执行strtok(x,y)(假设y指向空格),则在x指向的字符串的第一个空格被改为 \0(设此处为a处),且返回一个指向该nul的指针。然后再次执行strtok(null,y),问题:
1. 此时指针从a处开始接着往下找下一个空格?按照strtok的定义说明,此时它应该从他的第一个参数开始,即从null开始,那这个null是个空指针,是如何确定从哪里开始找的呢?注:上面的设置是设为nul而非null。
2. 如果在指针向下查找y的过程中,遇到nul即\0,则说明此时已经到达x指向的字符串结尾,结束查找,是吗?
谢谢!
------解决方案--------------------
- C/C++ code
#include <string.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { FILE* ini; char* name; char* value; char line[81]; ini = fopen("19.txt", "r"); if(ini == NULL) { return -1; } while(!feof(ini)) { fgets(line, 80, ini); name = strtok(line, "="); value = strtok(NULL, "="); if(name && value) { value[strlen(value) - 1] = '\0'; printf("[name=%s, value=%s]\n", name, value); } } return 0; }