C 制作变量参数列表函数
我用C语言编写了一个简单的变量参数列表函数,但它不起作用。当我用一个参数调用该函数,然后在该函数中检查该参数时,该参数失去了它的值。 e、 在下面的代码中,当我检查“format”的值时,它总是保持空值。它总是在调试消息中显示“format is NULL.”。 请引导我,这项事业的可能性是什么C 制作变量参数列表函数,c,C,我用C语言编写了一个简单的变量参数列表函数,但它不起作用。当我用一个参数调用该函数,然后在该函数中检查该参数时,该参数失去了它的值。 e、 在下面的代码中,当我检查“format”的值时,它总是保持空值。它总是在调试消息中显示“format is NULL.”。 请引导我,这项事业的可能性是什么 Calling the function: lcdPrintf( "Change" ); int lcdPrintf( char * format, ... ) { if ( *for
Calling the function: lcdPrintf( "Change" );
int lcdPrintf( char * format, ... )
{
if ( *format ) {
printf("format is not NULL.\r\n");
}
else {
printf("format is NULL.\r\n");
}
return -1;
}
使用
if(*format)
时,您正在测试format指向的第一个字符的值,如果要检查指针的有效性,请使用if(format)
。但你写的电话无论如何都能用
使用变量参数需要使用stdarg.h
和宏va_start
、va_arg
和va_end
变量参数处理需要知道您使用的每个参数的类型。这就是格式字符串在printf中有用的地方。每个参数都有某种类型(%s
是一个char*
,%d
是一个整数),它有助于va_arg
宏了解它必须读取多少字节才能获得下一个参数值
下面是一个使用va_args的简单示例
#include <stdarg.h>
void printIntegers(int count, ...)
{
va_list ap;
int i;
va_start(ap, count);
for (i = 0; i < count; i++) {
int v = va_arg(ap, int);
printf("%d\n", v);
}
va_end(ap);
}
int main()
{
printIntegers(2, 12, 42);
}
#包括
无效打印整数(整数计数,…)
{
va_列表ap;
int i;
va_启动(ap,计数);
对于(i=0;i
使用if(*format)
时,您正在测试format指向的第一个字符的值,如果要检查指针的有效性,请使用if(format)
。但你写的电话无论如何都能用
使用变量参数需要使用stdarg.h
和宏va_start
、va_arg
和va_end
变量参数处理需要知道您使用的每个参数的类型。这就是格式字符串在printf中有用的地方。每个参数都有某种类型(%s
是一个char*
,%d
是一个整数),它有助于va_arg
宏了解它必须读取多少字节才能获得下一个参数值
下面是一个使用va_args的简单示例
#include <stdarg.h>
void printIntegers(int count, ...)
{
va_list ap;
int i;
va_start(ap, count);
for (i = 0; i < count; i++) {
int v = va_arg(ap, int);
printf("%d\n", v);
}
va_end(ap);
}
int main()
{
printIntegers(2, 12, 42);
}
#包括
无效打印整数(整数计数,…)
{
va_列表ap;
int i;
va_启动(ap,计数);
对于(i=0;i
我已经使用下面的代码测试了您的函数,它似乎正常工作。问题是否可能源于代码中的其他地方
#include <stdio.h>
int lcdPrintf( char * format, ... )
{
if ( *format ) {
printf("format is not NULL.\r\n");
}
else {
printf("format is NULL.\r\n");
}
return 1;
}
int main(){
lcdPrintf("Test"); // Prints "format is not NULL."
return (0);
}
#包括
int lcdPrintf(字符*格式,…)
{
如果(*格式){
printf(“格式不为空。\r\n”);
}
否则{
printf(“格式为空。\r\n”);
}
返回1;
}
int main(){
lcdPrintf(“Test”);//Prints“格式不为空。”
返回(0);
}
我已经使用下面的代码测试了您的函数,它似乎正常工作。问题是否可能源于代码中的其他地方
#include <stdio.h>
int lcdPrintf( char * format, ... )
{
if ( *format ) {
printf("format is not NULL.\r\n");
}
else {
printf("format is NULL.\r\n");
}
return 1;
}
int main(){
lcdPrintf("Test"); // Prints "format is not NULL."
return (0);
}
#包括
int lcdPrintf(字符*格式,…)
{
如果(*格式){
printf(“格式不为空。\r\n”);
}
否则{
printf(“格式为空。\r\n”);
}
返回1;
}
int main(){
lcdPrintf(“Test”);//Prints“格式不为空。”
返回(0);
}
请引导我,这项事业的可能性是什么
Calling the function: lcdPrintf( "Change" );
int lcdPrintf( char * format, ... )
{
if ( *format ) {
printf("format is not NULL.\r\n");
}
else {
printf("format is NULL.\r\n");
}
return -1;
}
您的代码包含一个错误,这使您检查格式字符串的第一个字符,在本例中为“C”(表示“更改”)
因此,有一种可能性:您传递的格式字符串的第一个字符为零,即为空
#include <stdio.h>
int lcdPrintf( char * format, ... )
{
/* if you want to check whether format is null, the test ought to be */
/* if (format) ..., not if (*format) ... */
if ( *format ) {
printf("format is not NULL.\r\n");
}
else {
printf("format is NULL.\r\n");
}
return 0;
}
int main(void)
{
lcdPrintf("");
return 0;
}
#包括
int lcdPrintf(字符*格式,…)
{
/*如果您想检查格式是否为空,那么测试应该是空的*/
/*如果(格式)…,而不是如果(*格式)*/
如果(*格式){
printf(“格式不为空。\r\n”);
}
否则{
printf(“格式为空。\r\n”);
}
返回0;
}
内部主(空)
{
lcdPrintf(“”);
返回0;
}
这将返回“格式为空”。如果您按照指定的方式调用该代码,我看不出其他方法(如果您没有这样做,则所有赌注都被取消:-))
请引导我,这项事业的可能性是什么
Calling the function: lcdPrintf( "Change" );
int lcdPrintf( char * format, ... )
{
if ( *format ) {
printf("format is not NULL.\r\n");
}
else {
printf("format is NULL.\r\n");
}
return -1;
}
您的代码包含一个错误,这使您检查格式字符串的第一个字符,在本例中为“C”(表示“更改”)
因此,有一种可能性:您传递的格式字符串的第一个字符为零,即为空
#include <stdio.h>
int lcdPrintf( char * format, ... )
{
/* if you want to check whether format is null, the test ought to be */
/* if (format) ..., not if (*format) ... */
if ( *format ) {
printf("format is not NULL.\r\n");
}
else {
printf("format is NULL.\r\n");
}
return 0;
}
int main(void)
{
lcdPrintf("");
return 0;
}
#包括
int lcdPrintf(字符*格式,…)
{
/*如果您想检查格式是否为空,那么测试应该是空的*/
/*如果(格式)…,而不是如果(*格式)*/
如果(*格式){
printf(“格式不为空。\r\n”);
}
否则{
printf(“格式为空。\r\n”);
}
返回0;
}
内部主(空)
{
lcdPrintf(“”);
返回0;
}
这将返回“格式为空”。我看不出其他方法,如果您按照指定的方式调用该代码(如果您没有,则所有赌注都被取消:-)就像一个符咒;这肯定更重要。你应该检查
格式
,而不是*格式
。无论如何,我不明白它怎么能告诉你“格式为空”。除非你用lcdPrintf(“”)来称呼它,也许吧?谢谢大家的回复。代码绝对正确。当我在瑞萨RX63N微控制器上工作时,我想,堆栈可能被填满了。或者可能已填充保存变量参数的内存。但我不确定这个变量参数到底保存在哪里。我如何检查内存是否已满!请指导我,如何追踪这个记忆问题。工作起来很有魅力;那绝对是莫言