警告:格式'%s'期望类型为' char *'的参数,但参数2的类型为' char'

时间:2018-05-24 15:26:02

标签: c pointers

首先,此代码(PenaltyShootout.c)用于计算给定字符串中以1开头的1的数量。 " 0" - 没有目标, " 1" - 目标, " 2" - 犯规。

问题:PenatltyShootout.exe停止工作。

#include <stdio.h>
#include <string.h>

int main()
{
    int T,i;
    char str[100][500];
    int n=0;

没有。测试用例是否定的。输入不同字符串以检查代码的工作情况。

    do
    {
        printf("Enter the number of Test cases(must be between 1 and 100):\n");
        scanf("%d",&T);
    }while(T>100);

我尝试用(char *)str [i] [500]替换str [i] [500]并且警告消失,但PenaltyShootout.exe停止工作。

    for(i=0; i<T; i++)
    {
        printf("Enter the test case %d\n",i);
        scanf("%s",str[i][500]);
    }

    for(i=0; i<T; i++)
    {
        for(int j=0; j<strlen(str[i])-1; j++)
        { 
            if((str[i][j]=='2')&&(str[i][j+1]=='1')==1)
            {
                n++;
            }
        }

这应该打印出犯规后的进球数。

        printf("%d\n",n);
    }

   return 0;
}

1 个答案:

答案 0 :(得分:-1)

您对scanf("%s", str[i][500]);的来电正在将字符串("%s")读入字符(str[i][500])。

如果您尝试从提示中读取单个字母,则需要将其切换为:

scanf("%c", &str[i][500]);

"%c"scanf()知道您想要一个字母,而&告诉它使用内存中的字符地址(str[i][500],第501个位置在str[i](当你只有500个分配时))在哪里放置它。

如果您正在尝试阅读字符串(即单词或句子),则需要将其更像这样:

scanf("%s", str[i]);

在这里,您现在将扫描的字符串放入i中的str字符串缓冲区(您已为其分配了500 char)。