![](/img/trans.png)
[英]error C2440: '=' : cannot convert from 'const char [2]' to 'char'
[英]error C2440: '=' : cannot convert from 'int' to 'char [5]'
错误C2440:“ =”:无法从“ int”转换为“ char [5]”帮助我)
char type[5];
switch (rec[n-1].recptr->qtype)
{
case 'p':type='pcs'; break; //here is problem
case 'm':type='kgs'; break; // and here is too
default: printf("incorrect code");break;
}
首先,串进去双引号"
,而不是单引号'
。其次,要分配给char[]
数组你必须使用像函数strcpy()
你不能直接分配到一个数组=
。
case 'p': strcpy(type, "pcs"); break;
case 'm': strcpy(type, "kgs"); break;
首先, 'pcs'
是一个字符常量,而您需要一个字符串。 语法为"pcs"
。
而且, type
是一个数组,因此当不与sizeof
, _Alignof
或一元&
运算符一起使用时,它会衰减为指针,并且不是左值。 因此,您不能重新分配type
。
strcpy
可能是一个解决方案。
#include <string.h>
char type[5];
switch (rec[n-1].recptr->qtype)
{
case 'p':
strcpy(type,"pcs");
break;
case 'm':
strcpy(type,"kgs");
break;
default:
printf("incorrect code");
break;
}
或者,使用字符串垃圾(如果您不修改type
):
const char *type;
switch (rec[n-1].recptr->qtype)
{
case 'p':
type="pcs";
break;
case 'm':
type="kgs";
break;
default:
printf("incorrect code");
break;
}
C11(n1570),第6.3.2.1节L值,数组和函数指示符
除非它是
sizeof
运算符,_Alignof
运算符或一元&
运算符的操作数,或者是用于初始化数组的字符串文字,否则将类型为“ array of type”的表达式转换为带有键入“指向类型的指针”,它指向数组对象的初始元素,而不是左值。
'pcs'
是int
类型的多字符文字。
type
是一个数组。 您不能使用=
将任何东西分配给整个数组。
[从技术上讲,在该表达式type
其行为相当于指向数组第一个元素的不可修改的指针,但是您不能修改不可修改的值。
使用strcpy(type,“ pcs”)和strcpy(type,“ kgs”)或std:string,您不能仅通过赋值来复制数组中的字符!
请使用strcpy,您不能使用=分配给char [5]
case 'p': strcpy(type, "pcs"); break;
但是如果您想避免使用strcpy(即使在这种理论上安全的情况下),也可以通过以下方式进行操作:
/* partial copy (only 3 chars): */
strncpy ( type, "pcs", 3 );
type[4] = '\0'; /* null character manually added */
如果您可以保持sizeof(int)个字符以下,则可以执行以下操作:
int type;
switch (rec[n-1].recptr->qtype)
{
case 'p':type='pcs'; break; //here is problem
case 'm':type='kgs'; break; // and here is too
default: printf("incorrect code");break;
}
上面的代码未经测试,尽管我确实对此进行了测试:
int main( int argc, char **argv)
{
int t;
t = 'abcd';
printf ("t = %x\n", t);
t = 'dcba';
printf ("t = %x\n", t);
}
[347] ~/tmp: ./a.out
t = 61626364
t = 64636261
尽管这里您不必使用> sizeof(int)字符,但您实际上必须要小心。 我怀疑每个编译器的实际运行情况可能会有所不同。 使用此方法可以消除其他答案中所有多余的字符串担忧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.