提问人:Katelyn Chenelle 提问时间:7/9/2022 最后编辑:Vlad from MoscowKatelyn Chenelle 更新时间:7/9/2022 访问量:3054
从 'char *' 分配给 'char' 使指针中的整数不带强制转换 [-Wint-conversion]
assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion]
问:
我试图在输入 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);
| ^
我应该如何解决这个问题?
答:
0赞
Vlad from Moscow
7/9/2022
#1
编译器消息足够清晰。在此分配语句中
arr[MAXLINE * 1000] = strcat(smallVal, largeVal);
左操作数具有类型,而右操作数具有类型(函数的返回类型)。所以这种说法没有意义。char
char *
strcat
看来你的意思如下
strcpy( arr, strcat(smallVal, largeVal) );
请注意,数组应该足够大,以存储数组中附加的字符串。smallVal
largeVal
还有这个 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]
char
strcat
char
char *
评论
buffer