【问题标题】:Copy characters from char array to char array将字符从 char 数组复制到 char 数组
【发布时间】:2016-02-05 09:36:25
【问题描述】:

我有一个大小为 128 的 char 数组。我想将前 32 个复制到另一个 char 数组。这就是我正在尝试的方式:

char ticket[128];
data.readBytes(ticketLength, (BYTE*)ticket);
char sessionID[32];
strcpy(sessionID, ticket);

int userID = bdAuthService::checkLogin(sessionID);

“票”的内容是"11aa14462ac96a9b389686672b99fa9e1IvtooKO6eVxVHO6URIQld8jFaceTaker",当我尝试将sessionID 传递给checkLogin 函数时,它得到的内容与票"11aa14462ac96a9b389686672b99fa9e1IvtooKO6eVxVHO6URIQld8jFaceTaker" 相同。

谁能帮帮我?

【问题讨论】:

  • 看起来像是零终止和非零终止字符串的错误混合
  • 你最好先决定是用 C 还是 C++ 编程。

标签: c++ c arrays char


【解决方案1】:

改用memcpy 函数。

memcpy( sessionID, ticket, sizeof( sessionID )  );

考虑到 sessionID 不会包含字符串。它将包含“原始”字符。

至于函数strcpy,它被设计为复制以零结尾的字符序列的字符串。 因此,在您的代码片段的情况下,它将复制与 ticket 中的字符一样多的字符,前提是 ticket 中存在值 '\0' 的字符之前的字符。

【讨论】:

  • 当我像你说的那样使用 memcpy 时,被调用函数中的 sid 得到的值是“593378e02614ebf8468cb67ca319bedaðúÙ,ûÙ@ wÞUVSþÿÿÿ„úÙ
  • @BillAdonopoulos: 因为它不是空终止的
  • @BillAdonopoulos 什么是无用的东西?你说你需要复制32个字符。那么无用的东西从哪里来?
  • 那么我怎样才能让它空终止呢?如果我设置 sessionID[33] 我得到空终止的字符串,但它得到 33 个字符而不是我需要的 32 个字符,并且使用 [32] 它不是空终止的
  • @BillAdonopoulos 我认为问题不在于这个复制操作。问题是 ypu 如何在代码中进一步使用结果字符串。
【解决方案2】:

您可以使用 strncpy 指定要复制的字节数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多