在我的下面的代码中,这一行:
b[6] = Hello
抛出这个错误:
invalid conversion from 'const char*' to 'char' [-fpermissive]
题
为什么我收到此错误?实际上,我想要的是分别声明“b [6]”。不像char b [6] =“Hello”喜欢如果我把一个int变量说成“int x”然后我可以很容易地声明它的值分别说“x = 2”但是在这里,对于字符串变量为什么我无法做到这一点。
int a;
char b[6];
scanf("%d", &a);
if( a == 1)
b[6] = "Hello";
else
printf("Wrong");
在C中,字符串被视为char
数组,并且数组的名称被视为指向数组开头的指针。
char b[6];
根据这个声明,b
是一个指向6个char
s数组开头的指针。
b[6] = "Hello";
这一行试图将b
的第6个元素设置为“Hello”,但这样做有两个问题:
b[6]
实际上并不存在。 b
是6个元素长,从索引0开始,所以你可以使用的最高索引是5。b
是一个数组,所以b[6]
指的是一个特定的char
,而你试图将它设置为一个字符串,即指向char
的指针,因此你的错误信息。如果你想让b
保持“Hello”的值,有很多方法可以做到这一点。从理论上讲,你的b = "Hello";
方法可行,但大多数人可能会被认为是不好的做法。最基本的是将数组中的char
s的值一个接一个地设置为“Hello”中的字母,然后是NULL
字节。使用<string.h>
标准库,您可以(并且可能应该)使用strcpy
来完成它。
strcpy(b, "Hello");
benter code here
[6] =“你好”;
在这里,您将char char *分配给单个char(此外,char超出范围)。
如果你想要持“H”做:
strcpy(b, "H");
关于:`
b[6] = "Hello";`
引用数组时;结果是数组的第一个字节的地址。
所以声明试图将“Hello”的地址分配给char b[]
。
你想填补阵列b[]
?如果是这样,那么正确的方法是:
strcpy( b, "Hello" );
你应该像b [] =“Hello”一样使用它;