我有一个问题,我无法用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);
}
这是输出的开头:
48:
NAATAGACCTATATCCTGTACCCAAACAGAAGACAGAGGATTAACCAAACTCTT
48: (null)
44:
NTAGCCATCTTAGACACATGAATATCTTGGGTCACAACTCATACCTCAACAAAA
44: (null)
40:
NAAAATAAGGGGTATACTCGCTTCGGGGCCCCATTTGGCCTCCAAAAGGGGGCG
40: (null)
36:
NTCTATCTTGCTCGAGAGAAAGGGTTGCCTTAGGGTTTTTTGGGGGGGGCTGTA
36: (null)
32:
NCTATAGAAATTTCCCATACCAACTAGACATTTATCTTCCTGTTTTTTTCCGCC
32: (null)
正如你所看到的,我打印了两次数组的每个成员:每个参数一次,两个参数一起。数据很好,实际上第一种方法都可以,第二种方法只打印第一个参数。 任何的想法? 提前致谢
答案 0 :(得分:8)
以下一行,有演员,“工作”吗?
fprintf(outLeft, "%d: %s \n", (int)iterator->leftRow, iterator->leftDNA);
我怀疑iterator->leftRow
不 int
类型(或某种较小的类型会自动转换为int
)。如果我是对的你调用Undefined Behaviour;在第一种情况(单独的陈述)中没有明显的“不良行为”(运气不好),在第二种情况下,“不良行为”是打印“(NULL)”。
答案 1 :(得分:2)
哪种数据类型有iterator-&gt; leftRow?你有没有尝试过(即假设它很长)。
fprintf(outLeft, "%ld: %s \n", iterator->leftRow, iterator->leftDNA);