char数组副本的值错误

时间:2013-06-20 10:48:13

标签: c++

一切正常,编译没问题

#include <iostream>
#include <conio.h>

using namespace std;

void main(){
    char chArray[30];
    char chArray2[] = "this is working";
    *chArray = *chArray2;

    cout << chArray;
    getch();
}

但是......结果是

enter image description here

而且我不知道我做错了什么。为什么输出如图所示。请帮忙:&gt;

4 个答案:

答案 0 :(得分:2)

*chArray = *chArray2;只会设置第一个数组元素,而不是整个“字符串”。

P.S。没有去异地看看结果。你应该在问题中描述它。

答案 1 :(得分:2)

啊,很容易将C误认为C ++ ......

#include <iostream>
#include <string>

using namespace std;

int main(){
    string a;
    string b = "this is working";
    a = b;

    cout << a;
}

注意:

  • conio.h / getch不是标准C ++。
  • C ++要求main返回类型为int

答案 2 :(得分:1)

char chArray[30];

这将创建一个30 char的数组,其基地址与&chArray[0]相同,即数组的第一个元素的地址,与您在使用时的地址相同做chArrayarray name acts as a pointer

char chArray2[] = "this is working";

您正在创建一个常量字符串文字,在声明行中将其分配给chArray2。该数组的基地址与&chArray2[0]相同,并且chArray2

时相同

*chArray将引用数组的第一个元素,因此将*chArray2

使用*,您将chArray2的第一个元素的值分配给chArray 而不是地址

不能做/不应该做 那样做。

chArray不是char*类型的指针,您可以为其分配地址char* p = chArray2,但类型为char(*chArray)[30]。地址自动生成。

执行std::cout时会打印垃圾,因为没有分配chArray但第1个字符除外(注意没有\0标记结尾字符串,所以打印时你打印垃圾)     * chArray = * chArray2;

需要使用 strcpy(chArray,chArray2);chArray2正确复制到chArray

如果您使用c++(已标记),则可以使用std::string

它更容易也更好。

string chArray;
string chArray2 = "this is working";
chArray = chArray2;

<强>旁注:

将其设为int main()

答案 3 :(得分:-1)

在C / C ++指针中,运算符'&amp;'表示地址,'*'表示指针类型的值。

在你的情况下,代码* chArray = * chArray2将字符't'分配给* chArray数组。

所以你得到垃圾字符,因为字符串不以'\ 0'字符终止。

选项1: 你可以使用strcpy函数来复制字符串。 strcpy(chArray,chArray2);

选项2: 两个变量都应声明为指针,并应使用'='运算符进行分配。