错误 C2440: '=':无法从 'int' 转换为 'char [5]'
error C2440: '=' : cannot convert from 'int' to 'char [5]'
error 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左值、数组和函数指示符
除非是
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] = ' '; /* null character manually added */
如果您可以保持(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 = %xn", t);
t = 'dcba';
printf ("t = %xn", t);
}
[347] ~/tmp: ./a.out
t = 61626364
t = 64636261
在这里必须要小心,不要使用> sizeof(int)字符。我怀疑每个编译器对实际发生的事情的理解可能有所不同。使用此方法可以消除其他答案中浮动的所有额外字符串问题。
相关文章:
- 将无符号char*转换为std::istream*C++
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 将函数参数"const char*"转换为"std::string_view"是
- C ++如何在使用"tolower"时将char转换为int
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- JavaCPP 错误:无法将参数"1"的"char*"转换为"Abc*
- 为什么从 char 转换为 std::byte 可能是未定义的行为?
- 如何在虚幻引擎4中将char*转换为TCHAR?
- C++:将模板类型 char 转换为 std::string
- strcmp/char* 转换无法按预期工作
- C++中的SQLite char*转换
- 无法从 const char* 转换为 const char *&
- 在 C++ 中将 char 转换为 int,而无需符号位传播
- 如果必须包含西里尔字符,如何将 char* 转换为 std::string?
- 试图使用strCMP时的char转换错误
- 无法从'const char *'转换为'LPCTSTR'
- 将 std::vector<char> 转换为字符* 会导致字符缺陷
- 使用 static_cast 将 char 转换为 int c++
- 如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
- 无法将const char转换为字符串构造字符串