一切正常,编译没问题
#include <iostream>
#include <conio.h>
using namespace std;
void main(){
char chArray[30];
char chArray2[] = "this is working";
*chArray = *chArray2;
cout << chArray;
getch();
}
但是......结果是
而且我不知道我做错了什么。为什么输出如图所示。请帮忙:&gt;
答案 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 ++。main
返回类型为int
。答案 2 :(得分:1)
char chArray[30];
这将创建一个30 char
的数组,其基地址与&chArray[0]
相同,即数组的第一个元素的地址,与您在使用时的地址相同做chArray
(array 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: 两个变量都应声明为指针,并应使用'='运算符进行分配。