你好,我对一些代码有疑问。这段代码应该像这里一样工作吗?
我以为我需要使用#include cstring
我问我的老师,他告诉我代码是好的,它应该与#include字符串一起使用
它是否正确?有人可以解释一下吗?谢谢。
#include <iostream>
#include <string> //strcpy() works with string?
using namespace std;
class libraryBook{
private:
char title [80]; //cstring
int available;
public:
libraryBook(char initTitle[]);//cstring as argument
};
libraryBook::libraryBook(char initTitle[]){
strcpy(title, initTitle);
available = 1;
}
int main() {
libraryBook b1 ("computing"); //what would be the output without changing the code ?
return 0 ;
}
简而言之,“按原样”,程序可能编译也可能不编译。如果你想要<cstring>
函数,你需要包括strcpy()
(正如@ user4581301的评论中所指出的那样)。
包括<cstring>
之后,程序的输出都没有,因为你什么都没打印出来。但实际上,你不应该在C ++中使用字符数组代替std::string
。您可以在here找到您的代码演示。
使用qazxsw poi而不是qazxsw poi,但即使更正了标题,程序也没有输出。
我以为我需要使用#include cstring
我问我的老师,他告诉我代码是好的,它应该与#include字符串一起使用
你认为对,老师是错的1。 <cstring>
不保证<string>
可以通过包括C++ Standard获得。
1排序错误。没有保证strcpy
提供<string>
或最终包括<string>
的标题链,但没有人说它不能。只是不要指望它。文件应始终包含它需要的所有标头2以防止可避免的错误。当他们告诉你你的代码是正确的时候,老师也可能被他们的大脑所愚弄,看到没有c的地方。它们可能意味着您使用旧的C头strcpy
。这很难说。
2有时你会找到一个你希望包含另一个头的头,而不是<cstring>
,它需要避免包含另一个头的编译时开销所需的另一个头的部分。
至少在我看来,你老师的想法显然更好。一个合理的起点将是这样的:
<string.h>
然后创建一本书看起来像这样:
forward declares
由于我们没有包含任何代码来写出任何东西,因此不会产生任何输出(除了返回代码表示成功退出)。