VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 13|回复: 3

linux中一个关于文件指针的问题?

[复制链接]

3

主题

4

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2020-2-7 20:30:01 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int Get_Config(char *lpFileName,char *SerchBuf,char *szTmp)
{
    FILE *stream;
    char pBuf[256]="";
    char *p;
    char *ptoken = NULL;
   
           if((stream=fopen(lpFileName,"rt"))== NULL )   
          {
                                printf("opne file is error\n");
        return -1;
          }
                while(!feof(stream))
                {
                        memset(pBuf, 0x00, 256);
                        fgets(pBuf, 256, stream);
                        if(strstr(pBuf,SerchBuf))
                        {
                                p = strchr(pBuf, '=');
                                strncpy(szTmp, p + 1, sizeof(pBuf));
                                printf("this is very important data %s\n",szTmp);
                                break;
                        }
                        else
                                continue;
    }
    fclose(stream);
    return 1;
}


int main()
{
    char lpFileName[128]="Config.ini";
    char szTmp[128];
   
    memset(szTmp, 0x00, 128);
    if(Get_Config(lpFileName,"TMP_LEN=",szTmp)==-1)
    {
       printf("get config error\n");
    }
    printf("this TMP_LEN is %s\n",szTmp);
       
   getchar();
    return 0;   
}

我执行这个程序的时候,能够正确的读取一次配置文件的内容,但是第2次调用上面的这个Get_Config函数,就不能正常打开lpFileName文件了。请问一下是那里出了问题呢,我这边找了很久还是没有头绪。
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2020-8-9 20:15:01 | 显示全部楼层
你在那进行的第2次调用吗
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2020-8-10 20:15:01 | 显示全部楼层
是不是文件还没有被关闭? 调用完后再在main里调用一次会出险你说的错误
回复

使用道具 举报

0

主题

12

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2020-8-11 22:30:01 | 显示全部楼层
问题出在你的strncpy,linux里的这个函数会把dest用0来初始化一下,长度为strncpy的第三个参数,而你给出的参数显然大于了dest的大小,于是发生了难以预测的事情……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2020|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表