【问题标题】:CANNOT copying char into last address of char* ( string )?无法将 char 复制到 char* ( string ) 的最后一个地址?
【发布时间】:2011-05-27 07:55:07
【问题描述】:

我想将char*的数据复制到char*的另一个最后地址

插图

var1 -> O
var2 -> K

第一步

var1 -> OK
var2 -> K

var2复制到var1

结果

var1 -> OK

编写代码

#include <stdio.h>
#include <string.h>

void timpah(char *dest, char *src, int l_dest, int l_src)
{
    int i = 0;
    while(i < l_dest)
    {
        dest[l_dest+i] = src[l_src+i];
    i++;
    }
}

int main()
{

char res[2024];
res[1] = 0x4f;

char a[] = {0x4b};


timpah(res,a,1,1);

printf("%s [%d]\n",res,strlen(res));
return 0;
}

运行

root@xxx:/tmp# gcc -o a a.c
root@xxx:/tmp# ./a
 [0]

问题

为什么我的代码不起作用?或者是否已经存在任何功能来执行这些,但我还不知道?

感谢关注

【问题讨论】:

  • 如果您在 res[1] = 0x4f; 之后打印 res 会发生什么? res[0] 中有什么内容?
  • 我很确定它像错别字,但是当我将res[1] = 0x4f 更正为res[0] = 0x4ftimpah(res,a,1,1)timpah(res,a,1,2) 时,结果仍然相同.. 任何解决方案?
  • 什么是 l_dest 和 l_src?它们应该是长度还是偏移量?
  • 那你为什么在dest[l_dest+i] = src[l_src+i];中使用它们作为偏移量?

标签: c string memory stack-based


【解决方案1】:

您在任何时候都没有设置res[0]。如果res[0] 包含\0 你的字符串就在那里结束。您可能使事情变得比必须的更难;您可以随时使用strncpystrncat

【讨论】:

    【解决方案2】:

    你可能应该看看 strncat()、strncpy() 等

    【讨论】:

      【解决方案3】:
      #include <stdio.h>
      #include <string.h>
      
      void timpah(char *dest, char *src, int l_dest, int l_src)
      {
          int i = 0;
          while(i < l_dest)
          {
              dest[l_dest+i] = src[l_src+i];
          i++;
          }
      }
      
      int main()
      {
      
      char res[2024];
      res[0] = 0x4f;
      
      
      char a[] = {0x4b};
      
      
      timpah(res,a,1,0);
      
      res[2] = '\0';
      printf("%s [%d]\n",res,strlen(res));
      return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 2013-05-04
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 2010-12-03
        • 1970-01-01
        • 2013-08-20
        • 2015-11-21
        相关资源
        最近更新 更多