2

在 C [不是 C++] 中:

如何将 a 复制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

4 回答 4

3

strlen返回不带空终止符的长度。您需要再复制一个字节。

于 2012-10-21T18:41:56.467 回答
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..
于 2012-10-21T18:41:33.073 回答
1

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

while在循环之后添加以下行

tar[dl] = '\0';

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

char tar[80] = {0};

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

于 2012-10-21T18:42:16.567 回答
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);
于 2012-10-21T20:10:27.180 回答