我有一个问题,我无法掌握printf.这是我第一次遇到这个问题,所以我确定这是天真的,但无论如何,我都无法自己解决......也许只是因为我累了:fprintf(我发现了)它也适用于printf)只能正确打印第一个参数,从第二个参数开始,它只打印"0"表示数字,"(null)"表示字符串
这是相关的代码:
#include <math.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printInputStream(MatePair* inputStream, char* leftFile, char* rightFile){
MatePair* iterator = inputStream;
FILE* outLeft = fopen(leftFile, "w");
FILE* outRight = fopen(rightFile, "w");
while (iterator->leftRow != MATEPAIR_STOP){
fprintf(outLeft, "%d: \n", iterator->leftRow);
fprintf(outLeft, "%s \n", iterator->leftDNA);
fprintf(outLeft, "%d: %s \n", iterator->leftRow, iterator->leftDNA);
iterator++;
}
fclose(outLeft);
fclose(outRight);
}
Run Code Online (Sandbox Code Playgroud)
这是输出的开头:
48:
NAATAGACCTATATCCTGTACCCAAACAGAAGACAGAGGATTAACCAAACTCTT
48: (null)
44:
NTAGCCATCTTAGACACATGAATATCTTGGGTCACAACTCATACCTCAACAAAA
44: (null)
40:
NAAAATAAGGGGTATACTCGCTTCGGGGCCCCATTTGGCCTCCAAAAGGGGGCG
40: (null)
36:
NTCTATCTTGCTCGAGAGAAAGGGTTGCCTTAGGGTTTTTTGGGGGGGGCTGTA
36: (null)
32:
NCTATAGAAATTTCCCATACCAACTAGACATTTATCTTCCTGTTTTTTTCCGCC
32: (null)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我打印了两次数组的每个成员:每个参数一次,两个参数一起.数据很好,实际上第一种方法都可以,第二种方法只打印第一个参数.任何的想法?提前致谢
以下一行,有演员,"工作"吗?
fprintf(outLeft, "%d: %s \n", (int)iterator->leftRow, iterator->leftDNA);
Run Code Online (Sandbox Code Playgroud)
我怀疑iterator->leftRow是不是的int类型(或者是被转换到一些较小的类型int自动地).如果我是对的你调用未定义的行为 ; 在第一种情况下(单独的陈述)没有明显的"不良行为"(运气不好),在第二种情况下,"不良行为"是打印"(NULL)".