Printf和fprintf只打印第一个参数

时间:2011-09-20 12:13:45

标签: c null printf

我有一个问题,我无法用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) 

正如你所看到的,我打印了两次数组的每个成员:每个参数一次,两个参数一起。数据很好,实际上第一种方法都可以,第二种方法只打印第一个参数。 任何的想法? 提前致谢

2 个答案:

答案 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);