读书人

较大的字符数组读写有关问题

发布时间: 2012-03-14 12:01:12 作者: rapoo

较大的字符数组读写问题
我想写一个小程序可以将A文件中所有AT字母互换, CG字母互换, 然后逆序输出到B文件中. 以下是我写的代码:

#include <stdio.h>
#include <malloc.h>
void main()
{
char ch,temp;
FILE *fp1, *fp2;
long n=0,i=0;
fp1=fopen( "A.txt ", "r ");
fp2=fopen( "B.txt ", "w ");
while(fgetc(fp1)!=EOF) //统计A文件中字符数
{n++;}
char *str=(char *)malloc(n*sizeof(ch)); //给str分配足够的内存空间
str= " ";
rewind(fp1);
while((ch=fgetc(fp1))!=EOF) //进行AT,CG互换
{if(ch== 'A ') str[i]= 'T ';
if(ch== 'T ') str[i]= 'A ';
if(ch== 'C ') str[i]= 'G ';
if(ch== 'G ') str[i]= 'C ';
i++;
}
str[i]= '\0 ';
for(i=n-1;i> =0;i--) 将str逆序写入B文件中
{fputc(str[i],fp2);
}
free(str);
fclose(fp1);
fclose(fp2);
}

代码在turbo C++ 3.0中编译通过, 但是执行后, B文件中出现乱码. 想不明白是哪里的问题. 请高手指教.

[解决办法]
单双引号的问题吧
字符是单引号。
[解决办法]
能编译过?
[解决办法]
1。
str=""; //这里把指针指向了一个字符串常量,指针再不指向申请的动态内存,有大问题……如果是想清零,用memset

2。
//只在str中保存了几个要转换的数据,其他都没有保存下来
while((ch=fgetc(fp1))!=EOF) //进行AT,CG互换
{if(ch== "A ") str[i]= "T ";
if(ch== "T ") str[i]= "A ";
if(ch== "C ") str[i]= "G ";
if(ch== "G ") str[i]= "C ";
i++;
}
[解决办法]
char *str=(char *)malloc(n*sizeof(ch)); //给str分配足够的内存空间
str="";
...........................
free(str);

这样写,程序没崩溃是你幸运.str又被你指向了一个字符串常量了,free字符串常量是会报内存溢出的错误的.
-------------------------


[解决办法]

C/C++ code
#include   <stdio.h> #include   <malloc.h> #include  <string.h>void   main() {     char   ch,temp;     FILE   *fp1,*fp2;     long   n=0,i=0;     fp1 = fopen("C:\\Documents and Settings\\Rui.2B9F317BD5854FF\\桌面\\example\\A.txt","r");     fp2 = fopen("C:\\Documents and Settings\\Rui.2B9F317BD5854FF\\桌面\\example\\B.txt","w");     if(!fp1 || !fp2)    {        return;    }    while(fgetc(fp1) != EOF)   //统计A文件中字符数     {        n++;    }    char *str=(char *)malloc((n * sizeof(ch)) + 1);   //给str分配足够的内存空间     strcpy(str,"");     rewind(fp1);     while((ch = fgetc(fp1)) != EOF)     //进行AT,CG互换     {        str[i] = ch;        if(ch == 'A')   str[i] = 'T';         if(ch == 'T')   str[i] = 'A';         if(ch == 'C')   str[i] = 'G';         if(ch == 'G')   str[i] = 'C';         i++;     }    str[i]= '\0';    for(i = n - 1;i != -1;i--) //将str逆序写入B文件中     {        fputc(str[i],fp2);     }     free(str);     fclose(fp1);     fclose(fp2); }
[解决办法]
楼上都回答了,我就来蹭点分吧
[解决办法]
8楼做得不错。
[解决办法]
这么多分啊
来蹭点儿分……
[解决办法]
8楼不错~~~

读书人网 >C语言

热点推荐