strtok的用法(文件操作)

strtok :在一个字符串查找下一个符号

char *strtok( char *strToken, const char *strDelimit );

返回值:返回指向在strToken字符串找到的下一个符号的指针,当在字符串找不到符号时,将返回NULL.每

次调用都通过用NULL字符替代在strToken字符串遇到的分隔符来修改strToken字符串.

如果strtok函数第一个参数不是NULL,函数将找到字符串的第一个标记。strtok同时保存它在字符串中的位置。如果第一个参数是NULL,函数就在同一个字符串中从这个被保存的位置开始像前面一样查找下一个标记。字符串不存在更多的标记,则返回NULL; 

 char *array[32];
 int index = 0;
#if 0
 array[index] = strtok(buf, " ");
 while(array[index] != NULL){
  printf("%s\n", array[index]);
  index ++;
  array[index] = strtok(NULL, " ");
 }
#else
 for(array[index] = strtok(buf, " "); array[index] != NULL; index++,\
   array[index] = strtok(NULL, " "))
  printf("%s\n", array[index]);
#endif

以下是实际应用中的一段代码:

 1 /*read file*/
 2 msg_t *read_t()
 3 {
 4     int i = 0;
 5     int j = 0;
 6     char* a[128];
 7     char* result = NULL;
 8     char buf[128],tmp[128];
 9     FILE *fp;
10     char delims[] = " ";
11     memset(a,0,128);
12    // msg_t * msg = NULL;
13  
14     if((fp = fopen("./c.txt","r"))== NULL)
15     {
16   perror("fopen");
17     }
18  
19     while(fgets(buf,1024,fp) != NULL)//读取文件
20     {
21         printf("%s",buf);
22         a[i] = strtok(buf,delims);
23         while(a[i] != NULL) {//进行切割
24             printf("%s\n",a[i]);
25             i++;
26             a[i] = strtok(NULL,delims);
27         }
28 #if DEBUG
29         msg[j].type = *(a[0]);
30         strcpy(msg[j].name,a[1]);
31         strcpy(msg[j].pass,a[2]);
32         msg[j].age = atoi(a[3]);
33         strcpy(msg[j].sex,a[4]);
34         msg[j].salary = atoi(a[5]);
35         memset(a,0,128);
36         j++;
37         i = 0;
38         msg[j].type = '#';
39 #endif
40     }
41     fclose(fp);
42     return msg;
43 }
44 /*write file*/
45 int write_t(msg_t *msg) {
46    
47     int i = 0;
48     int j = 0;
49     char* a[128];
50     char* result = NULL;
51     char buf[128],tmp[128];
52     FILE *fp;
53     char delims[] = " ";
54     memset(a,0,128);
55 #if DEBUG
56        while(msg->type != '#'){
57     printf("%c\t",msg->type);
58     printf("%s\t",msg->name);
59     printf("%s\t",msg->pass);
60     printf("%5d\t",msg->age);
61     printf("%s\t",msg->sex);
62     printf("%5d\n",msg->salary);
63       msg++;
64        }
65 #endif
66   
67     if((fp = fopen("./a.txt","a")) == NULL){
68         return -1;
69     }
70     memset(buf,0,128);
71     sprintf(buf,"%c %s %s %d %s %d\n",msg->type,msg->name,msg->pass,
72         msg->age,msg->sex,msg->salary);//字符串拼写
73     fwrite(buf,sizeof(buf),1,fp);//写入文件
74     fclose(fp);
75 
76     return 0;
77 }

 

转载于:https://www.cnblogs.com/youthshouting/p/4277910.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 C 语言,可以使用 fgets 函数一行一行读取文件。 fgets 函数的原型为: ``` char *fgets(char *str, int n, FILE *stream); ``` 使用方法如下: ``` #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char str[100]; fp = fopen("file.txt", "r"); if (fp == NULL) { perror("Error opening file"); return(-1); } while (fgets(str, 100, fp) != NULL) { printf("%s", str); } fclose(fp); return 0; } ``` 在上面的代码,fgets 会从文件指针 fp 指向的文件读取最多 n-1 个字符,并将这些字符存储在 str 数组。fgets 会在读到文件末尾、读到一个换行符、或是已经读了 n-1 个字符之后停止。 在这个例子,我们使用了一个 while 循环,在文件末尾前不断调用 fgets,并将读取到的行输出到屏幕上。 希望这能帮到你! ### 回答2: 在C语言,可以使用文件操作函数逐行读取文件内容。 首先,我们需要使用`fopen`函数打开一个文件,该函数需要传入文件名和打开文件的模式(如"r"表示只读模式)。例子如下: ```c FILE *file = fopen("example.txt", "r"); ``` 然后,我们可以使用`fgets`函数逐行读取文件内容,该函数需要传入一个字符数组作为缓冲区和指定的最大字符数。例子如下: ```c char line[256]; // 定义一个字符数组作为缓冲区 while (fgets(line, sizeof(line), file) != NULL) { // 对读取的内容进行处理,例如打印每一行 printf("%s", line); } ``` 在`fgets`函数,它会读取一行文件内容(包括换行符),然后将其存储在指定的字符数组。如果成功读取到一行,则返回指向该字符数组的指针,否则返回`NULL`。因此,我们可以利用这个特性来进行逐行读取。 最后,我们需要记得使用`fclose`函数关闭文件,以便释放资源。例子如下: ```c fclose(file); ``` 通过以上步骤,我们就能够实现C语言文件操作的逐行读取功能。希望对你有所帮助! ### 回答3: 在C语言,可以使用标准库函数来实现文件操作。要一行一行读取文件,可以使用`fgets()`函数。 `fgets()`函数用于从指定的文件读取一行数据,并将其存储到指定的缓冲区函数原型如下: ```c char *fgets(char *str, int n, FILE *stream); ``` 其,`str`参数指向要存储一行数据的缓冲区,`n`参数表示缓冲区的大小,`stream`参数表示要读取的文件流。 下面是一个简单的例子,演示如何使用`fgets()`函数一行一行读取文件: ```c #include <stdio.h> #define MAX_LINE_LENGTH 100 // 假设每行最多100个字符 int main() { FILE *file; char line[MAX_LINE_LENGTH]; // 存储每行数据的缓冲区 file = fopen("example.txt", "r"); // 打开文件用于读取 if (file == NULL) { printf("无法打开文件。\n"); return 1; } while (fgets(line, MAX_LINE_LENGTH, file) != NULL) { printf("%s", line); // 输出每行数据 } fclose(file); // 关闭文件 return 0; } ``` 在上述代码,首先通过`fopen()`函数打开名为"example.txt"的文件,并将其赋值给`file`指针。然后,使用`fgets()`函数在循环内读取每一行数据,并将数据输出到屏幕上。最后,使用`fclose()`函数关闭文件。 需要注意的是,`fgets()`函数会将每行数据的换行符(`\n`)一并读取进来并存储到缓冲区,因此在输出时可能会有额外的空白行。如果需要去除换行符,可以使用字符串处理函数(如`strtok()`或手动替换字符)来进行处理。 希望以上回答对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值