从'const char *'到'char'的无效转换[-fpermissive]

问题描述 投票:0回答:4

在我的下面的代码中,这一行:

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
4个回答
2
投票

在C中,字符串被视为char数组,并且数组的名称被视为指向数组开头的指针。

char b[6];

根据这个声明,b是一个指向6个chars数组开头的指针。

b[6] = "Hello";

这一行试图将b的第6个元素设置为“Hello”,但这样做有两个问题:

  1. b[6]实际上并不存在。 b是6个元素长,从索引0开始,所以你可以使用的最高索引是5。
  2. b是一个数组,所以b[6]指的是一个特定的char,而你试图将它设置为一个字符串,即指向char的指针,因此你的错误信息。

如果你想让b保持“Hello”的值,有很多方法可以做到这一点。从理论上讲,你的b = "Hello";方法可行,但大多数人可能会被认为是不好的做法。最基本的是将数组中的chars的值一个接一个地设置为“Hello”中的字母,然后是NULL字节。使用<string.h>标准库,您可以(并且可能应该)使用strcpy来完成它。

strcpy(b, "Hello");

0
投票

benter code here [6] =“你好”;

在这里,您将char char *分配给单个char(此外,char超出范围)。

如果你想要持“H”做:

strcpy(b, "H");

0
投票

关于:`

b[6] = "Hello";`  

引用数组时;结果是数组的第一个字节的地址。

所以声明试图将“Hello”的地址分配给char b[]

你想填补阵列b[]?如果是这样,那么正确的方法是:

strcpy( b, "Hello" );

-3
投票

你应该像b [] =“Hello”一样使用它;

© www.soinside.com 2019 - 2024. All rights reserved.