【发布时间】:2011-10-25 01:34:54
【问题描述】:
我正在尝试进行 C 风格的字符串复制,但有些东西无法正常工作。我做错了什么?
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main() {
char string_a[20]="Good day!";
char string_b[30]="Hi!";
int i=0;
cout << "string a: " << string_a << endl;
cout << "string b: " << string_b << endl;
while (*string_a++ = *string_b++) {
cout << ++i << endl;
}
cout << "string a: " << string_a << endl;
cout << "string b: " << string_b << endl;
return 0;
}
【问题讨论】:
-
最好在问题正文中添加单词和短语,而不是“解决方法”。
-
也许仅仅标题就足以解决这个问题......但是,对于 Stack Overflow 来说不是。你至少可以提到为什么它失败了。
-
两个问题。您已将
string_a和string_b声明为数组,而不是指针。因此,它们的地址是不可变的,所以string_a++和string_b++应该会产生错误。此外,最好写while ((x=y) != '\0')以明确您正在复制结果并将结果与空字符进行比较。一般来说,单个=作为if或while条件是一个危险信号。 -
写起来很容易,例如,
while (var1 = var2)当你真正的意思是(while var1 == var2)。更糟糕的是,当您扫描代码时可能很难找到这点,因为您会看到您的意思,而不是您写的内容。我发现试图展示自己熟练程度的新程序员倾向于使用更简单的while (var1 = var2),而更有经验的专业人士倾向于使用更容易维护的while ((var1 = var2) != 0)。预先保存几个字符可能会在数小时后花费,这是假设错误没有出现在现场的情况下。 -
假设它是一个错误,并假设它有助于查看它。我不会混淆
=和==。但是看到!= '\0'让我头疼。
标签: c++ arrays string pointers