首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们应该使用什么作为std::strcpy的第二个参数?

我们应该使用什么作为std::strcpy的第二个参数?
EN

Stack Overflow用户
提问于 2013-04-11 15:58:24
回答 3查看 995关注 0票数 0

我有下面的例子,取自这里:

代码语言:javascript
复制
// strings and c-strings
#include <iostream>
#include <cstring>
#include <string>

int main ()
{
  std::string str ("Please split this sentence into tokens");

  char * cstr = new char [str.length()+1];
  std::strcpy (cstr, str.c_str());

  // cstr now contains a c-string copy of str

  char * p = std::strtok (cstr," ");
  while (p!=0)
  {
    std::cout << p << '\n';
    p = strtok(NULL," ");
  }

  delete[] cstr;
  return 0;
}

据我所知,str是一个字符串,str.c_str()是一个指向数组第一个元素的指针,该数组的元素包含str字符。然后使用std::strcpy,我们将地址的值作为它的第二个参数,并将这个值赋给作为第一个参数(cstr)的指针。

但是,我有以下取自here的示例

代码语言:javascript
复制
#include <iostream>
#include <cstring>

int main()
{
    char *str = new char[100];
    std::strcpy(str, "I am string!");
    std::cout << str;
    delete[] str;
}

现在,作为第二个参数,我们有一个字符串(而不是第一个示例中指向数组的指针)。

有人能澄清一下这个矛盾吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-11 16:01:35

当使用std::strcpy时,我们将给定地址的值作为其第二个参数,并将该值赋给作为第一个参数(cstr)的指针。

代码语言:javascript
复制
char * strcpy ( char * destination, const char * source );

没有strcpy真正读取源指向的每个字符并将它们写到目标,它在读取终止空字符时停止。

在第二个示例中,源参数是一个字符串文字,其类型为const char[]。这个字符串可以衰减成一个常量char*,然后传递给strcpy。

字符串文字只不过是指向只读位置的指针。

票数 4
EN

Stack Overflow用户

发布于 2013-04-11 16:00:10

,现在作为第二个参数,我们有一个字符串(而不是第一个例子中指向数组的指针)

在第二个示例中,您有一个C字符串,它是指向以NUL结尾的字符数组的指针。没有不一致的地方。

票数 1
EN

Stack Overflow用户

发布于 2013-04-11 16:03:03

char *strcpy( char *dest, const char *src );需要常量字符的源指针,并将内存复制到类型为字符的目标指针。该函数从source复制字符串长度,直到找到source的以null结尾的字符串。"I am string!"是一个常量char* const`,它是一个字符串文字,主要存储在只读标记内存中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15943514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档