在变量参数中使用字符串指针

时间:2018-12-04 18:44:47

标签: c string function pointers variadic-functions

问题 因此,正如标题所暗示的,我在问是否有一种方法可以将stdarg.h用于变量自变量函数中的文本打印。我想到了一种可以搜索的callendar的想法,但是我遇到了查找/测试输入字符串的问题。我将感谢您的任何建议。

代码:

void CinemaPrint(int count,...)
{
    va_list k;
    va_start(k,count);
    int i=0;
    for(i=1;i<count+1;i++)
    {
        printf("%d. %s\n\n",i, va_arg(k,int));
    }
    va_end (k);
    char textz[]="xxxxxxxxxxxxxx";
    scanf("%s",&textz);
    char* pointer=(char*)(&count+1);
    for(i=1;i<count+1;i++)
    {
        if(textz==*pointer)
        {
            printf("Cinema %s is %d.",*pointer, i);
        }
    }
}

int main()
{
    printf("Hello kino!\n");
    char text1[]="Cinema City";
    char text2[]="Hutnik";
    char text3[]="Svetozor";
    char text4[]="Lucerna";
    char text5[]="Flora3D";

    CinemaPrint(5,text1,text2,text3,text4,text5);


    return 0;
}

功能

Hello kino!
Cinema City

Hutnik

Svetozor

Lucerna

Flora3D

Hutnik //this was inputed from me. After this it ends

我想要它做什么

Hello kino!
Cinema City

Hutnik

Svetozor

Lucerna

Flora3D

Hutnik

Cinema Hutnik is 2.

1 个答案:

答案 0 :(得分:1)

这里有两个主要问题。

首先,您无法使用char* pointer=(char*)(&count+1);手动遍历变量参数列表,而需要使用其他va_start实例再次调用va_endva_list。您还应该将参数检索为char *而不是int,以便类型参数类型匹配。

第二,您不能将字符串与==进行比较。那只会比较每个地址。您需要strcmp才能做到。

char textz[]="xxxxxxxxxxxxxx";
scanf("%s",textz);

va_list k2;
va_start(k2, count);
for(i=1;i<count+1;i++)
{
    char *pointer = va_arg(k2, char *);
    if(!strcmp(textz,pointer))
    {
        printf("Cinema %s is %d.",pointer, i);
    }
}
va_end(k2);