2

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

4 に答える 4

3

strlenヌルターミネータなしの長さを返します。もう1バイトコピーする必要があります。

于 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 に答える