这段代码的输出是什么,它在构造函数中使用了 strcpy?
what would be the output of this code, it uses strcpy in a constructor?
您好,我对一些代码有疑问。
这段代码应该像这里一样工作吗?
我想我需要使用#include cstring
我问过我的老师,他告诉我代码很好,而且
它应该与#include string
一起使用
这是正确的吗?有人可以解释一下吗?谢谢。
#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 ;
}
简而言之,"as is",程序可能编译也可能不编译。如果你想要 strcpy()
函数,你需要包含 <cstring>
(正如@user4581301 在评论中指出的那样。
包含 <cstring>
之后,程序的输出为空,因为您没有打印任何内容。但实际上,您不应该在 C++ 中使用字符数组代替 std::string
。可以找到您的代码演示 here。
TL;DR
使用 <cstring>
而不是 <string>
,但即使更正了 header,程序也没有输出。
讨论
I thought I would need to use #include cstring
I asked my teacher and he told me that the code is good as it is and that it should work with #include string
你想对了,老师错了1。 C++ Standard 不保证 strcpy
通过包含 <string>
.
可用
1 Sort-of错了。无法保证 <string>
提供 strcpy
或最终包含 <cstring>
的 header 链,但没有人说它不能。只是不要指望它。文件应始终包含它需要的所有 header2 以防止出现可避免的错误。老师也可能被他们的大脑愚弄,当他们告诉你你的代码是正确的时候,在没有 c 的地方看到了 c。他们可能想让你使用旧的 C header <string.h>
。不好说。
2 有时您会发现 header 您希望包含另一个 header 而不是 forward declares 的部分other header 它需要避免包含 other header.
的 compile-time 开销
至少在我看来,你老师的想法显然更好。一个半途合理的起点是这样的:
#include <string>
class LibraryBook {
std::string name;
int available;
public:
LibraryBook(std::string const &name, int available = 1)
: name(name)
, available(available)
{}
};
然后创建一本书看起来像这样:
LibraryBook book("Steal This Code");
因为我们没有包含任何代码来写出任何东西,所以这不会产生任何输出(除了返回一个代码来指示成功退出)。
您好,我对一些代码有疑问。 这段代码应该像这里一样工作吗?
我想我需要使用#include cstring
我问过我的老师,他告诉我代码很好,而且 它应该与#include string
一起使用这是正确的吗?有人可以解释一下吗?谢谢。
#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 ;
}
简而言之,"as is",程序可能编译也可能不编译。如果你想要 strcpy()
函数,你需要包含 <cstring>
(正如@user4581301 在评论中指出的那样。
包含 <cstring>
之后,程序的输出为空,因为您没有打印任何内容。但实际上,您不应该在 C++ 中使用字符数组代替 std::string
。可以找到您的代码演示 here。
TL;DR
使用 <cstring>
而不是 <string>
,但即使更正了 header,程序也没有输出。
讨论
I thought I would need to use #include cstring
I asked my teacher and he told me that the code is good as it is and that it should work with #include string
你想对了,老师错了1。 C++ Standard 不保证 strcpy
通过包含 <string>
.
1 Sort-of错了。无法保证 <string>
提供 strcpy
或最终包含 <cstring>
的 header 链,但没有人说它不能。只是不要指望它。文件应始终包含它需要的所有 header2 以防止出现可避免的错误。老师也可能被他们的大脑愚弄,当他们告诉你你的代码是正确的时候,在没有 c 的地方看到了 c。他们可能想让你使用旧的 C header <string.h>
。不好说。
2 有时您会发现 header 您希望包含另一个 header 而不是 forward declares 的部分other header 它需要避免包含 other header.
的 compile-time 开销至少在我看来,你老师的想法显然更好。一个半途合理的起点是这样的:
#include <string>
class LibraryBook {
std::string name;
int available;
public:
LibraryBook(std::string const &name, int available = 1)
: name(name)
, available(available)
{}
};
然后创建一本书看起来像这样:
LibraryBook book("Steal This Code");
因为我们没有包含任何代码来写出任何东西,所以这不会产生任何输出(除了返回一个代码来指示成功退出)。