打开文件时出现问题,可能是文件i/o到字符串
Problem when opening file AND possibly file i/o to string
我正试图编写一个程序,将文件复制到一个字符串(到目前为止这么好),这将包含DNA碱基。然后将碱基转化为蛋白质,首先找到第一个ATG序列,然后读取3个序列并转换它们,将它们写入另一个文件。
到目前为止,程序在进入第一个for循环之前就崩溃了。我不知道是什么引起了这个问题。
int proteina(char DNA_origem[], char proteina_destino[]){
char aminocidosING [64][14]={"Isoleucine","Isoleucine","Isoleucine","Leucine","Leucine","Leucine","Leucine","Leucine","Leucine","Valine","Valine","Valine","Valine","Phenylalanine","Phenylalanine","Methionine","Cysteine","Cysteine","Alanine","Alanine","Alanine","Alanine","Glycine","Glycine","Glycine","Glycine","Proline","Proline","Proline","Proline","Threonine","Threonine","Threonine","Threonine","Serine","Serine","Serine","Serine","Serine","Serine","Tyrosine","Tyrosine","Tryptophan","Glutamine","Glutamine","Asparagine","Asparagine","Histidine","Histidine","Glutamic acid","Glutamic acid","Aspartic acid","Aspartic acid","Lysine","Lysine","Arginine","Arginine","Arginine","Arginine","Arginine","Arginine","Stop codons","Stop codons","Stop codons"};
char aminocidosPT [64][18]={"Isoleucina","Isoleucina","Isoleucina","Leucina","Leucina","Leucina","Leucina","Leucina","Leucina","Valina","Valina","Valina","Valina","Fenilalanina","Fenilalanina","Metionina","Cisteína","Cisteína","Alanina","Alanina","Alanina","Alanina","Glicina","Glicina","Glicina","Glicina","Prolina","Prolina","Prolina","Prolina","Treonina","Treonina","Treonina","Treonina","Serina","Serina","Serina","Serina","Serina","Serina","Tirosina","Tirosina","Triptofano","Glutamina*","Glutamina","Asparagina","Asparagina","Histidina","Histidina","Ácido glutâmico","Ácido glutâmico","Ácido aspártico","Ácido aspártico","Lisina","Lisina","Arginina","Arginina","Arginina","Arginina","Arginina","Arginina","Códons Stop","Códons Stop","Códons Stop"};
char codoes[64][3]={"ATT","ATC","ATA","CTT","CTC","CTA","CTG","TTA","TTG","GTT","GTC","GTA","GTG","TTT","TTC","ATG","TGT","TGC","GCT","GCC","GCA","GCG","GGT","GGC","GGA","GGG","CCT","CCC","CCA","CCG","ACT","ACC","ACA","ACG","TCT","TCC","TCA","TCG","AGT","AGC","TAT","TAC","TGG","CAA","CAG","AAT","AAC","CAT","CAC","GAA","GAG","GAT","GAC","AAA","AAG","CGT","CGC","CGA","CGG","AGA","AGG","TAA","TAG","TGA"};
char proteinas[64][1] = {"I","I","I","L","L","L","L","L","L","V","V","V","V","F","F","M","C","C","A","A","A","A","G","G","G","G","P","P","P","P","T","T","T","T","S","S","S","S","S","S","Y","Y","W","Q","Q","N","N","H","H","E","E","D","D","K","K","R","R","R","R","R","R",".",".","."};
/* a esta altura suponho que tenhas definido na main as strings dos aminoácidos*/
char **string1;
FILE * ficheiro;
FILE * ficheiro_close;
int f_cmp;
int k, i, start=0; /* variavel de comprimento */
char proteina_origem;
ficheiro = fopen(DNA_origem,"r"); /* DNA origem e a variavel onde ta guardada o nome do ficheiro do utilizador */
ficheiro_close = fopen(proteina_destino,"w+");
fscanf(ficheiro,"%c",string1); /* isto lê os conteudos da stream para a string, copiando pra lá o ficheiro. */
for(i=1;i<=f_cmp;i++) {
if (strncmp(string1[i],codoes[15],3)==0) {
fputs(proteinas[15],ficheiro_close);
for(k=i+2;k<=f_cmp;k+3) {
if ((strncmp(string1[k],codoes[k],3))==0) {
fputs(proteinas[k],ficheiro_close);
if (k==61&&k==62&&k==63) {
return(0);
}
}
}
}
}
}
而且,如果我在char定义中没有使用**,编译器会给出警告。你能给我点光吗?这应该只是一个简单的项目,但我被困在这最后一个功能..
不要介意var的名字和注释,它是葡萄牙语的。
非常感谢您的时间!
如果你使用的是指针,那么在声明之后,你必须用合适的有效内存初始化指针。初始化后,指针只指向一个地址,或者指向其他变量的地址,或者指向你为这个指针创建的内存(例如使用malloc()或new操作符)。如果不影响您完成手头任务的编码方法,最好使用字符数组。
但是如果你声明string1为
<>之前char * * string1之前像这样使用fscanf
<>之前fscanf (ficheiro"% c",* string1);我认为你的fscanf
呼叫有一个问题。您正在尝试扫描一个值并将其存储在string1变量中,但是没有为string1分配内存。正如您现在所拥有的,string1只是一个指向指向char的指针的指针,因此没有地方存储实际的字符串值。你可以在堆栈上分配,也可以在堆上分配。试试这样做:
char string1[80]; // Or use whatever size makes sense here
...
fscanf(ficheiro, "%c", string1);
同样,你可能已经这样做了,但是你应该在完成后将你的文件fclose
。
这是错误的:
<>之前fscanf (ficheiro"% c",string1);之前我看到string1只声明,但没有初始化。
相关文章:
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 如何打开并写入一个名称取自C++中字符串的文件
- 如何从二进制文件中读取字符串
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 将字符串与文件上的数据进行比较
- 用户输入字符串的文件附加问题..C++
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 使用文件内容作为硬编码字符串
- 将文件复制到自定义位置,存在字符串转换问题
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 声明要在 qml 和 cpp 文件中使用的全局字符串
- C 通过char读取文件字符串的文件char;崩溃
- 我不明白如何将 toupper 和 isalpha 与.txt文件字符串输入一起使用
- 在 CPP 文件中使用 make 文件字符串变量
- 编译 PyGAMMA Mac Lion:g++ 找不到标准的 C++ 头文件(字符串/iostream..)
- 如何在c++中使用文件字符串作为命令
- 使用 TinyXML 解析 XML 文件字符串
- 递归下降解析器帮助(不读取文本文件字符串)