从 'char *' 分配给 'char' 使指针中的整数不带强制转换 [-Wint-conversion]

assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion]

提问人:Katelyn Chenelle 提问时间:7/9/2022 最后编辑:Vlad from MoscowKatelyn Chenelle 更新时间:7/9/2022 访问量:3054

问:

我试图在输入 a 时继续将 largeVal 与 smallVal 连接起来,并将结果存储到数组中。arr[]

int driver()
{
    char buffer[MAXLINE];
    char reply[MAXLINE * 1000];
    char largeVal[MAXLINE] =
        "a1b2c3d4e5f6g7h8i9j10a1b2c3d4e5f6g7h8i9j10a1b2c3d4e5f6g7h8i9j10a1b2c3d4e5f6g7h8i9j10a1b2c3d4e5f6g7h8i9j10a1b2c3d4e5f6g7h8i9j10a1b2c3d4e5f6g7h8i9j10a1b2c3d4e5f6g7h8i9j10";
    char smallVal[MAXLINE] = "5";

    while (strcmp(buffer,"a") == 0)
    {
        arr[MAXLINE * 1000] = strcat(smallVal, largeVal);
    }
    return foo(buffer, reply);
}

错误消息如下:

警告:从“char *”分配给“char”会使指针中的整数不带强制转换 [-Wint-conversion]

   91 |         arr[MAXLINE * 1000] = strcat(smallReply, largeReply);
      |                               ^

我应该如何解决这个问题?

编译器错误 C-strings 赋值运算符 strcat

评论

0赞 John Kugelman 7/9/2022
“当输入 a 时”是什么意思? 未初始化,并且不会对其进行任何修改。没有用户输入或任何东西。buffer

答:

0赞 Vlad from Moscow 7/9/2022 #1

编译器消息足够清晰。在此分配语句中

arr[MAXLINE * 1000] = strcat(smallVal, largeVal);

左操作数具有类型,而右操作数具有类型(函数的返回类型)。所以这种说法没有意义。charchar *strcat

看来你的意思如下

strcpy( arr, strcat(smallVal, largeVal) );

请注意,数组应该足够大,以存储数组中附加的字符串。smallVallargeVal

还有这个 while 循环

while (strcmp(buffer,"a") == 0)
{
    arr[MAXLINE * 1000] = strcat(smallVal, largeVal);
}

在任何情况下都会调用未定义的行为,因为本地数组未初始化。buffer

char buffer[MAXLINE];

而且,即使数组将由字符串初始化,循环也将是无限的。buffer"a"

0赞 S4NR-3000 7/9/2022 #2

在生产线上

arr[MAXLINE * 1000] = strcat(smallVal, largeVal);

有两个问题。首先,您不是将字符串分配给 ,而是尝试访问 position 中的元素,而 该元素又只是一个普通的 。其次,返回指向 (数组) 的指针,即:.因此,您正在尝试在需要值的位置分配指针。arr[MAXLINE * 1000]charstrcatcharchar *