在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*
复制到字符串中?
答案 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);