无法使用memcpy复制字符串

时间:2016-08-10 16:07:58

标签: c++ arrays string memcpy

我有一个字符串toioyhpknmtlghk。我想创建一个包含n行的二维字符数组,使其包含长度为n的第一,第二,第三子字符串。

例如,此处 n = 5 长度为5的子字符串为toioy hpknmtlghk 所以数组 arr 应该看起来像

t o i o y
h p k n m
t l g h k

现在,如果我通过循环遍历数组来复制字符,这可能会更容易,但在这里我尝试使用 memcpy

int main()
{
  long n;
  cin>>n;
  char a[3][n+1];char str[20];   //I have taken n+1 columns as n for substring and 1 for '\0'
  scanf("%s",str);
  char *p=str;
  memcpy(a[0],p,n);strcat(a[0],"\0");
  p=p+n;
  memcpy(a[1],p,n);strcat(a[1],"\0");
  p=p+n;
  memcpy(a[2],p,n);strcat(a[2],"\0");

  for(int i=0;i<3;i++)
  {
    printf("%s\n",a[i]);
  }

}

但是在输出数据后会得到结果,

//input
5
toioyhpknmtlghk

//output    
toioy
hpknm{tlghk‼â
tlghk‼â

1 个答案:

答案 0 :(得分:1)

命令strcat(a[0],"\0");正在处理已由\0终止的字符串。否则它不知道 where 附加第二个字符串。在您的情况下,a[0]未终止,因此该函数将导致未定义的行为。您可以改为:

a[0][n] = '\0';

(其他a元素也一样)