c – va_arg给出了垃圾文本
发布时间:2020-12-16 09:38:32 所属栏目:百科 来源:网络整理
导读:我做了一个简单的测试用例: static void va_test(char* str_arg,...){ va_list ap; va_start(ap,str_arg); for( ; ; ) { if (str_arg == NULL) break; int n = va_arg(ap,int); printf("arg: %s,%dn",str_arg,n); str_arg = va_arg(ap,char*); } va_end(ap
我做了一个简单的测试用例:
static void va_test(char* str_arg,...) { va_list ap; va_start(ap,str_arg); for( ; ; ) { if (str_arg == NULL) break; int n = va_arg(ap,int); printf("arg: %s,%dn",str_arg,n); str_arg = va_arg(ap,char*); } va_end(ap); printf("n"); } 当我用独立的可执行文件中的va_test(“beer”,1,“cofe”,2,“juice”,3,0)运行它时,它可以正常工作.但是当我从我的项目可执行文件中调用它时,它非常大,它给出了一些像这样的垃圾字符串: arg: bear,1 arg: cofe,2 arg: juice,3 arg: ^X(garbage...),57 我想在调用这个函数之前一定会出现内存混乱,但是如何调试呢? [编辑] 解决方法
对我来说最有可能的解释是,你所处的系统中int 0具有不同于char * 0的表示.这可以在64位系统上,其中sizeof(int)== 4和sizeof(char * )== 8.
尝试将最后一个参数传递为(char *)0而不是0,你应该没问题.所有其余代码在技术上看起来都是正确的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |