Printf和fprintf只打印第一个参数

Ale*_*lex 4 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);

}
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)

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

pmg*_*pmg 8

以下一行,有演员,"工作"吗?

fprintf(outLeft, "%d: %s \n", (int)iterator->leftRow, iterator->leftDNA);
Run Code Online (Sandbox Code Playgroud)

我怀疑iterator->leftRow不是int类型(或者是被转换到一些较小的类型int自动地).如果我是对的你调用未定义的行为 ; 在第一种情况下(单独的陈述)没有明显的"不良行为"(运气不好),在第二种情况下,"不良行为"是打印"(NULL)".

  • 类型为"int64_t"的C99标准printf说明符是`PRId64`(记得`#include <inttypes.h>`),如:`printf("%"PRId64":%s \n",v64 ,"string");`.我相信微软的编译器不符合C99所以你必须使用它自己的不可移植的方式("%I64d"`)或强制转换为`long`并使用`"%ld"`并希望未来不会破坏任何东西. (2认同)