有这么一个函数,参数是行数,和行后。
void up_strings(int count, unsigned char string[150], ... ){
int i;
unsigned char * str;
va_list other_strings;
va_start (other_strings,string);
for ( i = 0; i < count; i++ ){
str = va_arg( other_strings,unsigned char* );
printf("%s",str);
}
va_end(other_strings);
}
unsigned char str[]="adag asd";
up_strings(1 ,str);
程序在这一行崩溃
str = va_arg( other_strings,unsigned char* );
所以你实际上并没有传达任何东西!
你来这里干什么?一些垃圾,对不起,垃圾躺在堆栈上,变成了一个指针......
废话正在发生:)
然而 - 好吧,为什么你需要准确传输
unsigned char string[150]
,而不是unsigned char * string
?为什么不char*
呢?但是,这并不影响对主要问题的回答。总之,要么调用
up_strings(0,str);
,要么将循环重写为for(i = 1; i < count; i++ )
。或者重写函数(我将在下面展示)。此外,你
string
的函数不使用 - 除了va_start
. 所有这些都表明你并不真正了解所有这些va_
。它们仅用于可选参数,string
无法通过它们访问您的参数。这是我的功能版本: