错误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;
}
答案 0 :(得分:5)
首先,字符串采用双引号"
,而不是单引号'
。其次,要分配到char[]
数组,您必须使用strcpy()
之类的函数。您不能使用=
直接分配给数组。
case 'p': strcpy(type, "pcs"); break;
case 'm': strcpy(type, "kgs"); break;
答案 1 :(得分:4)
首先,'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;
}
或者,使用字符串litterals(如果不修改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左值,数组和函数指示符
除非它是
sizeof
运算符的操作数,_Alignof
运算符,或一元&
运算符,或者是用于的字符串文字 初始化一个数组,一个类型为''array of type''的表达式 转换为类型为''指向类型'指针的表达式 到数组对象的初始元素,而不是左值。
答案 2 :(得分:1)
'pcs'
是int
类型的多字符文字。
type
是一个数组。您无法使用=
为整个数组指定任何内容。
[从技术上讲,表达式type
表现为指向数组第一个元素的不可修改的指针,但是你不能修改不可修改的值。]
答案 3 :(得分:0)
使用strcpy(type,“pcs”)和strcpy(type,“kgs”)或std:string,只能通过赋值来复制数组中的字符!
答案 4 :(得分:0)
请使用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 */
答案 5 :(得分:0)
如果您可以保持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
虽然你不使用&gt;但你必须要小心。 sizeof(int)字符在这里。我怀疑每个编译器的里程数可能因实际情况而异。使用此方法可以消除在其他答案中浮动的所有额外字符串忧虑。