这段代码的输出是什么,它在构造函数中使用strcpy?

问题描述 投票:1回答:3

你好,我对一些代码有疑问。这段代码应该像这里一样工作吗?

我以为我需要使用#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 ;
}
c++ class c-strings strcpy
3个回答
1
投票

简而言之,“按原样”,程序可能编译也可能不编译。如果你想要<cstring>函数,你需要包括strcpy()(正如@ user4581301的评论中所指出的那样)。

包括<cstring>之后,程序的输出都没有,因为你什么都没打印出来。但实际上,你不应该在C ++中使用字符数组代替std::string。您可以在here找到您的代码演示。


1
投票

TL;DR

使用qazxsw poi而不是qazxsw poi,但即使更正了标题,程序也没有输出。

Discussion

我以为我需要使用#include cstring

我问我的老师,他告诉我代码是好的,它应该与#include字符串一起使用

你认为对,老师是错的1。 <cstring>不保证<string>可以通过包括C++ Standard获得。

1排序错误。没有保证strcpy提供<string>或最终包括<string>的标题链,但没有人说它不能。只是不要指望它。文件应始终包含它需要的所有标头2以防止可避免的错误。当他们告诉你你的代码是正确的时候,老师也可能被他们的大脑所愚弄,看到没有c的地方。它们可能意味着您使用旧的C头strcpy。这很难说。

2有时你会找到一个你希望包含另一个头的头,而不是<cstring>,它需要避免包含另一个头的编译时开销所需的另一个头的部分。


1
投票

至少在我看来,你老师的想法显然更好。一个合理的起点将是这样的:

<string.h>

然后创建一本书看起来像这样:

forward declares

由于我们没有包含任何代码来写出任何东西,因此不会产生任何输出(除了返回代码表示成功退出)。

© www.soinside.com 2019 - 2024. All rights reserved.