将const char *复制到c中的字符串

时间:2012-10-21 18:40:11

标签: c string char const

在C [不是C ++]中:

如何将const char*复制到字符串(char数组)?

我有:

const char *d="/home/aemara/move/folder"
char tar[80] ;
int dl=strlen(d);
int x=0;
while (x<dl){tar[x]=d[x]; x++; }
printf("tar[80]: %s\n",tar);

打印出来:tar[80]: /home/aemara/move/folderøèB 问题是这样,在数组的末尾添加垃圾[有时,并不总是] 我该如何解决?还是有另一种方法可以将const char*复制到字符串中?

4 个答案:

答案 0 :(得分:3)

strlen返回没有null终止符的长度。您需要再复制一个字节。

答案 1 :(得分:2)

您忘记在复制后在末尾添加'\ 0'字符。

要解决此问题,memset(tar,'\0',80);

或者:

if(d1 < 80){ //bad idea, don't use magic numbers
  while(x < d1){ tar[x] = d[x]; x++;}
  tar[x] = '\0';
}
printf..

答案 2 :(得分:1)

strlen的返回值不包括NULL终止符。

while循环

之后添加以下行
tar[dl] = '\0';

或者,在声明数组时,您可以将tar初始化为零。

char tar[80] = {0};

现在循环后你不需要NULL终止。

答案 3 :(得分:0)

这是你应该做的:

const char *d="/home/aemara/move/folder";//Semi-colon was missing in your posted code
char tar[80];
memset(tar,0x00,80);//This always a best practice to memset any array before use
int dl=strlen(d);//This returns length of the string in excluding the '\0' in the string
int x=0;
if(dl<79)// Check for possible overflow, 79th byte reserved=1 byte for '\0'
while (x<dl){ tar[x]=d[x]; x++; }
if(x<80) d[x]=0;//If not using memset have to use this, xth byte initialized to '\0'
printf("\ntar[80]: %s\n",tar);