无法将char复制到char *的最后一个地址(字符串)?

时间:2011-05-27 07:55:08

标签: c string memory stack-based

我想将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]

问题

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

thx任何关注

3 个答案:

答案 0 :(得分:4)

您没有在任何时候设置res[0]。如果res[0]包含\0,那么您的字符串就会结束。你可能正在努力使事情变得更加艰难;您可以随时使用strncpystrncat

答案 1 :(得分:0)

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

答案 2 :(得分:0)

#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;
}