鱼C论坛

 找回密码
 立即注册
查看: 3436|回复: 6

求高手来帮帮忙吧 !!

[复制链接]
发表于 2012-4-6 18:53:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 /鸡蛋饼. 于 2012-4-6 18:57 编辑

这个程序,希望大家帮忙看下, 整个程序还没写完,现在出先了一个这样的问题 当我运行的程序的时候:
    程序重.txt文件中读取完数据 ,我用printf输出检查的时候,数据的末尾就会出现乱字符 给大家上一个图
1234.jpg 这是怎么回事呀,怎样造成的 ?
   如果觉得代码上难得看得话,只要看main 中的两个函数调用就可以了 其实只有两个步骤!
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MaxLine 5
/*Data Strut*/
typedef char* string;
typedef enum{False,True}BOOL;
typedef struct
{
string qtext[MaxLine];
string answerse;
}Question,*pQuestion;
/*Function declaratione*/
static FILE* OpenUserFile(string prompt,string mode);
static char *Gmalloc (void);
static string ReadLine(FILE *infile);
/*Main program*/
int main (void)
{
FILE* infile;
string temp;
infile = OpenUserFile("Enter FileName:\n","r"); //打开文本文件

temp = ReadLine(infile); //重文件读取一行的数据
printf("%s",temp); //输出刚刚读取的的数据
  ;
return 0;
}
/*Function
*调用格式:OpenUserFile(字符串,文件工作模式)
*调用功能:建立只读或者只写的FILE变量
*/
static FILE* OpenUserFile(string prompt,string mode)
{
string filename;   
FILE *result;
while(True)
{
  printf("%s\n",prompt);
  filename = Gmalloc();
  result = fopen(filename,mode);
  if(result != NULL)
  {
   break;
  }
  printf("不能打开%s 文件,请重新输入:\n",filename);
}
  return (result);
}
/*Function:Gmalloc
*调用格式:Gmalloc()
*调用功能:给输入的字符串分配与字符串
*长度相当的内存。
*/
static char *Gmalloc (void)
{
char* pTemp;
char Temp[88];
gets(Temp);
pTemp = (char *)malloc(strlen(Temp));
strcpy(pTemp,Temp);
return pTemp;
}
/*
*Function:ReadLine
*-----------------
*调用格式:ReadLine();
*调用功能:对从文件中读取的数据给予
*分配内存保存数据。
*/
static string ReadLine(FILE *infile)//
{
char line[50];
string pline;
int ch,n;
n = 0;
if(!line)
{
  printf("line分配内存失败");
}
while((ch = getc(infile)) != EOF && ch != '\n' )
{
  line[n++] = ch;
  
}
line[n] = '\n';

pline = (string)malloc(strlen(line));
strcpy(pline,line);
return (pline);

}

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-6 19:36:18 | 显示全部楼层
我也没发现问题,帮你顶一下。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-6 19:45:23 | 显示全部楼层
本帖最后由 hkcx3000 于 2012-4-6 19:47 编辑

问题出现在ReadLine()函数上,line[n] = '\n'改成line[n] = '\0',问题就没了吧

另外
if(!line)
{
  printf("line分配内存失败");
}
我觉得怪怪的。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-6 20:28:19 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-6 20:36:12 | 显示全部楼层
hkcx3000 发表于 2012-4-6 19:45
问题出现在ReadLine()函数上,line[n] = '\n'改成line[n] = '\0',问题就没了吧

另外

谢谢  问题是解决了 ,可这是怎么照成的呢 ?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-6 20:43:46 | 显示全部楼层
printf("%s",temp); //输出刚刚读取的的数据
要给字符串一个结束标志'\0'嘛,不然哪知道哪里是结束

char line[50];你这里没赋初始值,里面很多“烫”字哦,等随机遇到第一个'\0'才会结束,如果char line[50]={0};初始后就不会了。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-4-6 21:30:57 | 显示全部楼层
hkcx3000 发表于 2012-4-6 20:43
printf("%s",temp); //输出刚刚读取的的数据
要给字符串一个结束标志'\0'嘛,不然哪知道哪里是结束

谢谢鱼友--看来初始化很重要呀!
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-12 15:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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