#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE *fp = NULL;
char buf[1024] = {0};
char *p = buf;
fp = fopen("./tt", "r+");//注:当前目录下的tt文件已存在
if(NULL == fp)
{
return 0;
}
fseek(fp, 0, SEEK_SET);
while(1 == fscanf(fp, "%s", p))
{
p = buf + strlen(buf);
*p++ = '$';
}
printf("%s ", buf);
printf("\n\r");
fclose(fp);
return 0;
}
追问能不能解释一下,好像和我问的不太一样,我没有看出来分隔啊,
追答fseek(fp, 0, SEEK_SET); //从文件头开始读
while(1 == fscanf(fp, "%s", p))//循环读取文件字符串 保存到buf
{
p = buf + strlen(buf);//p 指向数组末尾
*p++ = '$';//存储‘$’, 后移一个
}
追问比如我读取一个txt文件12$123$89$654,它输出的就是12$123$89$654$,,这不对吧,我的意思是把它放到一个比如a[i]的数组,然后通过i的递增可以按顺序打下来啊
追答我可能没明白你的意思!你能说明白一点吗?
1、你是想去除字符串中的‘$’ 比如文本内容123$456$ 取出后存储到数组为 123456
2、还是从文件中取字符串然后以'$'分割保存 比如文本内容123 456 取出后存储到数组为 123$456$
还是。。。。?
我的这段代码是第二种,将文件字符串保存到数组buf,以'$'分割保存。
或者你的意思是将12 123 89 654 取出后保存到数组后,
a[1] 打印 12$
a[2] 打印 123$
a[3] 打印 89$
a[4] 打印 654$
如果是这样你就用下面代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100 //数组大小
int main(void)
{
FILE *fp = NULL;
char *p[MAX];
char buf[1024] = {0};
int i = 0, j = 0;
//打开文件
fp = fopen("./tt", "r+");
if(NULL == fp)
{
return 0;
}
//读取文件
fseek(fp, 0, SEEK_SET);
while(1 == fscanf(fp, "%s", buf))
{
j = strlen(buf);
p[i] = malloc(sizeof(char) * j + 2);
memset(p[i], 0, (sizeof(char) * j + 2));
strcpy(p[i], buf);
p[i][j] = '$';
p[i][j+1] ='\0';
i++;
if(i >= MAX)
{
break;
}
}
//
for(j = 0; j < i; j++)
{
printf("%s\n\r", p[j]);
}
//释放内存
for(j = 0; j < i; j++)
{
free(p[j]);
}
//关闭文件
fclose(fp);
return 0;
}