printf非常奇怪的参数问题

以下代码在VS2013上可以通过编译,但是运行到最后一行才出错。

    char *s1 = "hello";
    char *s2 = "world";
    printf("%x %x\n", s1, s2);
    printf("%x %x %x\n", s1, s2);
    printf("%s %s\n", s1, s2);
    printf("%s %s %s\n", s1, s2);

这是个遗留问题,暂时还不知道问题的原因。希望有知道的牛人可以帮忙解答。

时间: 2024-10-13 05:57:24

printf非常奇怪的参数问题的相关文章

printf()多参数实现机制

摘要:一直以来都觉得printf似乎是c语言库中功能最强大的函数之一,不仅因为它能格式化输出,更在于它的参数个数没有限制,要几个就给几个,来者不拒.printf这种对参数个数和参数类型的强大适应性,让人产生了对它进行探索的浓厚兴趣. 关键字:printf, 可变参数 1. 使用情形 int a =10; double b = 20.0; char *str = "Hello world"; printf("begin print\n"); printf("

Printf可变参数使用

参考文档: http://bbs.csdn.net/topics/70288067 Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源 本文的二个重点: 1. 可变参数实际上通过首个参数的地址来获取其它参数的地址,因为是顺序存储传过来的 1.      可变参数为了处理方便,所有的浮点型都是按照double型压栈. 因此,像printf采用的可变参数,它直接使用%f显示double型,不需要管float型. 关注printf的精度,需要先关

gnu printf可变参数宏

可变参数的宏 标准C只支持可变参数的函数,意味着函数的参数可以是不固定的 例如printf()函数的原型是int printf(const char *format [,argument]...) 而在GNU C中,宏也可以接受可变数目的参数,例如 #define pr_debug(fmt,arg...) printk(fmt,##arg) 这里arg表示其余的参数可以是零个或多个,这些参数以及参数之间的逗号构成arg的值,在宏扩展时替换arg ,例如 pr_debug("%s:%d"

C语言 -- printf函数参数类型和打印格式不匹配

C语言中,变量在运算或者赋值时会存在类型的自动转换.很一般的情况这里不再讨论,下面只说一下赋值和利用printf函数打印时的情况 1.赋值时的自动转换 int a = 1.5; printf("%d", a); 输出值为1  因为1.5是一个double类型,但是在赋值为a时,由于a是一个int类型,所以将小数部分舍去,a为1 2.printf函数中不涉及自动转换 他只按照固定的格式打印,如果解析失败,就输出对应格式下的0 例如: int a = 1; printf("%f&

汇编中call printf参数压栈时错误理解

EAX, ECX,EDX,EBX均可以32bit,16bit,8bit访问,如下所示: <-------------------EAX------------------------>|<----------------------|-----------|----------->|  |<---------AX--------->|  |<---AH--->|<---AL--->| 测试代码如下: 1 .section .data 2 outp

进程操作篇atexit execl exit fprintf fscanf getpid nice get priority printf setpid system vfork wait waitpid

atexit(设置程序正常结束前调用的函数) 相关函数 _exit,exit,on_exit 表头文件 #include<stdlib.h> 定义函数 int atexit (void (*function)(void)); 函数说明 atexit()用来设置一个程序正常结束前调用的函数.当程序通过调用exit()或从main中返回时,参数function所指定的函数会先被调用,然后才真正由exit()结束程序. 返回值 如果执行成功则返回0,否则返回-1,失败原因存于errno中. 范例 #

Linux命令详解-printf

printf命令格式化并输出结果到标准输出. 1.命令格式: printf (选项) (参数) 2.命令功能: echo会将输入的字符串送往标准输出.输出的字符串间以空白字符隔开,并在最后加上换行号. 3.命令参数: 格式替代符 %b ????????????相对应的参数被视为含有要被处理的转义序列之字符串. %c ????????????ASCII字符.显示相对应参数的第一个字符 %d, %i ????????十进制整数 %e, %E, %f ????浮点格式 %g %e或%f????转换,看

C语言笔记之printf()函数

先看例子: printf("This line has only controlling strings.\n"); `printf("I am %d years old and %f inch tall", 21, 132); 参数 printf()的参数分为两大部分,分别是控制字符串和参数列表,二者用逗号隔开,而且参数之间也要用逗号隔开.其中控制字符串是字符串常量,如果不需要其他参数的话,双引号里面的文字将被原原本本的打印到屏幕.通俗的讲,双引号里面是什么,输出

如何使用getopt()函数解析参数

最近在写程序的过程中,把一部分时间都花费在程序对参数的处理上.今天听了学长说到getopt函数,才发现原来c里面还有一个专门解决参数处理的函数,查询了相关资料,这里简单总结一下. 使用int main( int argc, char *argv[] )(或int main( int argc, char **argv ))时,系统将把用户输入的参数通过argc和argv引入程序中,argc为参数的个数,argv是指向参数的指针数组,其中第一个参数为自身程序文件名. 这里我们使用getopt()