-4

一切正常,编译没有问题

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

using namespace std;

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

    cout << chArray;
    getch();
}

但是...结果是

在此处输入图像描述

我不知道我做错了什么。为什么输出如图所示。请帮忙:>

4

4 回答 4

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.
于 2013-06-20T11:37:39.217 回答
2

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

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

于 2013-06-20T10:49:56.213 回答
1
char chArray[30];

这将创建一个 30 chars 的数组,其基地址与&chArray[0]数组的第一个元素的地址相同,并且与您在执行操作时获得的地址相同chArray数组名称充当指针

char chArray2[] = "this is working";

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

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

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

而且你不能/不应该这样做。

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

当你这样做时std::cout,它会打印垃圾,因为除了第一个字符之外没有分配任何东西chArray(注意没有\0标记字符串的结尾,所以在打印时打印垃圾)*chArray = *chArray2;

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

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

它更容易更好。

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

边注:

做了int main()

于 2013-06-20T10:55:12.347 回答
-1

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

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

所以你得到了垃圾字符,因为字符串不是以 '\0' 字符结尾的。

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

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

于 2013-06-20T10:58:43.510 回答