VerySource

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

请教一个关于指针的问题。

[复制链接]

3

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-2-13 14:00: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文件了。这时显示为opne file is error。请问各位大虾扎个整哦?
回复

使用道具 举报

0

主题

7

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-4-11 18:15:01 | 显示全部楼层
打开文件后要把它关掉。
fclose(stream);
回复

使用道具 举报

3

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-4-11 20:45:01 | 显示全部楼层
我的代码中加入了这行的。
不过还是只能执行一次,再次调用就不能打开文件。
回复

使用道具 举报

0

主题

19

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-4-13 12:45:01 | 显示全部楼层
strncpy(szTmp, p + 1, sizeof(pBuf));
-------------------------------------
这一行的问题,szTmp你只定义了128字节大小,拷贝用了sizeof(pBuf)=256,产生越界操作,把文件名区域都覆盖了,没有文件名,第二次当然打不开文件了。
回复

使用道具 举报

0

主题

19

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-4-13 14:00:01 | 显示全部楼层
strncpy(szTmp, p + 1, sizeof(pBuf));
--------------------------
这一行有问题,sizeof(pBuf)=256,而你的szTmp只有128字节大小,产生越界操作,把lpFileName里的内容覆盖了,再次调用函数时,没有文件名,打开文件当然出错了。
回复

使用道具 举报

0

主题

19

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-4-13 16:45:02 | 显示全部楼层
strncpy(szTmp, p + 1, sizeof(pBuf));
越界操作,冲了文件名
回复

使用道具 举报

0

主题

19

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-4-14 13:45:01 | 显示全部楼层
strncpy(szTmp, p + 1, sizeof(pBuf));
越界操作,覆盖了文件名,再次打开时就出错了。
回复

使用道具 举报

0

主题

19

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-4-14 14:15:01 | 显示全部楼层
strncpy(szTmp, p + 1, sizeof(pBuf));
越界操作,覆盖了文件名。
回复

使用道具 举报

0

主题

24

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-4-15 12:15:01 | 显示全部楼层
不太可能哦
回复

使用道具 举报

0

主题

19

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-4-16 21:45:01 | 显示全部楼层
strncpy(szTmp, p + 1, sizeof(pBuf));
这行代码有错,越界了,文件名可能被覆盖了。
回复

使用道具 举报

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

本版积分规则

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

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