Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 打开文件和文件i/o到字符串时出现问题_C++_Arrays_String_Char - Fatal编程技术网

C++ 打开文件和文件i/o到字符串时出现问题

C++ 打开文件和文件i/o到字符串时出现问题,c++,arrays,string,char,C++,Arrays,String,Char,我正试图编写一个程序,将一个文件复制成一个包含DNA碱基的字符串。然后将碱基转换成蛋白质,首先找到第一个ATG序列,然后按3的顺序读取并转换它们,将它们写入另一个文件 到目前为止,程序在进入第一个for循环之前崩溃。。我不知道是什么导致了这个问题 int proteina(char DNA_origem[], char proteina_destino[]){ char aminocidosING [64][14]={"Isoleucine","Isoleucine","Isoleucine",

我正试图编写一个程序,将一个文件复制成一个包含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);
            }
          }
        }
      }
    }
}
int-proteina(char-DNA_-origem[],char-proteina_-destino[]){
半氨基酸化[64][14]={“异亮氨酸”、“异亮氨酸”、“异亮氨酸”、“亮氨酸”、“亮氨酸”、“亮氨酸”、“亮氨酸”、“亮氨酸”、“亮氨酸”、“缬氨酸”、“缬氨酸”、“缬氨酸”、“苯丙氨酸”、“苯丙氨酸”、“蛋氨酸”、“半胱氨酸”、“半胱氨酸”、“丙氨酸”、“丙氨酸”、“甘氨酸”、“甘氨酸”、“甘氨酸”、“甘氨酸”、“甘氨酸”、“甘氨酸”、“脯氨酸”、“脯氨酸”、“脯氨酸”、“脯氨酸”、“脯氨酸”“苏氨酸”、“苏氨酸”、“苏氨酸”、“苏氨酸”、“丝氨酸”、“丝氨酸”、“丝氨酸”、“丝氨酸”、“丝氨酸”、“丝氨酸”、“酪氨酸”、“酪氨酸”、“色氨酸”、“谷氨酰胺”、“谷氨酰胺”、“天冬酰胺”、“组氨酸”、“组氨酸”、“组氨酸”、“谷氨酸”、“谷氨酸”、“天冬氨酸”、“天冬氨酸”、“赖氨酸”、“精氨酸”、“精氨酸”、“精氨酸”、“精氨酸”、“精氨酸”、“精氨酸”,“精氨酸”、“终止密码子”、“终止密码子”、“终止密码子”};
氨基酸残基[64][18]={“异亮氨酸”、“异亮氨酸”、“异亮氨酸”、“亮氨酸”、“亮氨酸”、“亮氨酸”、“亮氨酸”、“亮氨酸”、“亮氨酸”、“亮氨酸”、“缬氨酸”、“缬氨酸”、“缬氨酸”、“菲尼拉拉尼娜”、“菲尼拉尼娜”、“蛋氨酸”、“西斯泰娜”、“西斯泰娜”、“丙氨酸”、“丙氨酸”、“格列西娜”、“格列西娜”、“格列西娜”、“格列西娜”、“格列西娜”、“脯氨酸”、“脯氨酸”、“脯氨酸”、“脯氨酸”Treonina、Treonina、Treonina、Treonina、Serina、Serina、Serina、Serina、Serina、Serina、Serina、Tirosina、Tirosina、Triptofano、Glutamina*、“Glutamina”、“Glutamina”、“Histidina”、“Histidina”、“cido glutt–mico”、“cido glutt–mico”、“cido aspártico”、“Lisina”、“Lisina”、“Argina”、“Argina”、“Argina”、“Argina”、“Argina”等Argina、Argina、Códons站、Códons站、Códons站;
字符编码[64][3]{“ATT”、“ATC”、“ATA”、“CTT”、“CTC”、“CTA”、“CTG”、“TTA”、“TTG”、“GTT”、“GTA”、“GTG”、“TTT”、“TTC”、“ATG”、“TGT”、“TGC”、“GCT”、“GCT”、“GCA”、“GCG”、“GGT”、“GGC”、“GGA”、“GGG”、“CCT”、“CCA”、“CCG”、“ACT”、“ACC”、“ACA”、“ACG”、“TCT”、“TCC”、“TCA”、“TCA”、“AGC”、“TAT”、“TAC”、“TAC”、“TGG”、“TGG”、“CAA”、“CAG”、“AAT”、“AAT”、“AAC”、“CAC”、“GAA”、“GAG”、“GAG”、“GAG”、“GAG”“,”CGT“,”CGC“,”CGA“,”CGG“,”AGA“,”AGG“,”TAA“,”TAG“,”TGA“};
char proteinas[64][1]={“I”、“I”、“I”、“L”、“L”、“L”、“L”、“V”、“V”、“F”、“F”、“M”、“C”、“A”、“A”、“G”、“G”、“G”、“G”、“G”、“P”、“P”、“P”、“P”、“T”、“T”、“S”、“S”、“S”、“S”、“Y”、“W”、“Q”、“N”、“H”、“H”、“H”、“E”、“D”、“K”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“S”、“S”、“S”、“S”、“S”、“S”、“S”、“S”、“S”、“S”、“S”、“S”、“W”、“W”、“Q”、“Q”、“Q”、“N”、“N”、“H”、“E”、“E”、“D”、“D”、“K”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“R”、“;
/*这是一个很好的例子,它把主音定义为弦乐*/
字符**string1;
文件*ficheiro;
文件*ficheiro\u关闭;
int f_cmp;
int k,i,start=0;/*压缩变量*/
煤焦蛋白;
ficheiro=fopen(DNA_-origem,“r”);/*DNA-origem e a variavel on de ta guardada o nome do ficheiro do utilizador*/
ficheiro_close=fopen(proteina_destino,“w+”);
fscanf(ficheiro,“%c”,string1);/*是一个字符串,是一个字符串*/

对于(i=1;i我相信您的调用有一个问题。您正试图扫描一个值并将其存储在string1变量中,但没有为string1分配内存。正如您现在所拥有的,string1只是指向字符指针的指针,因此没有存储实际字符串值的位置。您可以在堆栈上分配它,也可以在在堆上吃了它。尝试以下方法:

char string1[80]; // Or use whatever size makes sense here

...

fscanf(ficheiro, "%c", string1);
fscanf(ficheiro,"%c", *string1); 此外,您可能已经在这样做了,但在处理完文件后,您应该将其保存下来。

这是错误的:

fscanf(ficheiro,"%c",string1); fscanf(ficheiro,“%c”,string1); 我看到string1只声明但没有初始化。

如果您使用的是指针,那么在声明之后,您必须使用合适的有效内存初始化指针。初始化之后,指针只指向一个地址,或者指向其他变量的地址,或者指向您为此指针创建的内存(例如,使用malloc()或new运算符)。 最好使用字符数组,如果它不损害您完成手头任务的编码方法的话

但是,如果将string1声明为

char** string1 字符**string1 像这样使用fscanf:

char string1[80]; // Or use whatever size makes sense here

...

fscanf(ficheiro, "%c", string1);
fscanf(ficheiro,"%c", *string1); fscanf(ficheiro,“%c”,*string1);
在使用
ficheiro
之前,请确保它是一个有效的文件指针(通过检查
if(ficheiro)
我之前有一个printf来测试,打印出变量,它工作得很好。还有一些代码缺失,但它仍然不工作,以防万一,在for循环之前,
f_cmp=strlen(*string1)
好吧,那可能不是这样,但你还是应该检查一下你的文件指针:)String1在很多方面让我感到困扰,因为首先它在fscanf中像字符一样使用。然后你尝试通过取消引用它来像字符串一样使用它,但它不是字符串……然后跳过第0个成员(数组在C中从0变为大小为1),因此您可能会越界。我让程序使用
char-string1[10]
运行,但它仍然无法运行,可能是因为文件的大小未知?在string中,它的长度将超过1200个字符。此外,文件从来没有固定大小,因为我使用char-string[]在成功之前,但似乎未知的大小可能是问题所在。@DaRk_f0x:不要羞于让字符串足够大-例如16384、65536-它在堆栈上,并将在函数退出时回收。但是:%c只读取一个字符-您可能需要“%s”或“%[xyz]”-阅读你的
scanf
manpage。更好的方法是使用C++的机制:
if(std::ifstream-ficheiro(DNA_-origem)){std::string1;if(std::getline(ficheiro,string1)){…}
std::string
可以扩展到任何大小。您的文件真的只有一行吗?@OP:您想使用fscanf逐行读取吗?这是个坏主意,除非您想要标记化