使用 memcpy 复制字符串时遇到问题
Trouble copying the string using memcpy
我有一个字符串 toioyhpknmtlghk
。我想创建一个具有 n 行的二维字符数组,它包含第一个、第二个、第三个子字符串,长度为 n。
比如这里n=5长度为5的子串是,toioy
hpknm
和tlghk
所以数组 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 '[=11=]'
scanf("%s",str);
char *p=str;
memcpy(a[0],p,n);strcat(a[0],"[=11=]");
p=p+n;
memcpy(a[1],p,n);strcat(a[1],"[=11=]");
p=p+n;
memcpy(a[2],p,n);strcat(a[2],"[=11=]");
for(int i=0;i<3;i++)
{
printf("%s\n",a[i]);
}
}
但是在输出数组时得到以下结果,
//input
5
toioyhpknmtlghk
//output
toioy
hpknm{tlghk‼â
tlghk‼â
命令 strcat(a[0],"[=11=]");
正在处理已被 [=12=]
终止的字符串。否则它不知道 where 附加第二个字符串。在您的情况下 a[0]
未终止,因此该函数将引发未定义的行为。您可以改为执行以下操作:
a[0][n] = '[=10=]';
(其余a
个元素相同)
我有一个字符串 toioyhpknmtlghk
。我想创建一个具有 n 行的二维字符数组,它包含第一个、第二个、第三个子字符串,长度为 n。
比如这里n=5长度为5的子串是,toioy
hpknm
和tlghk
所以数组 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 '[=11=]'
scanf("%s",str);
char *p=str;
memcpy(a[0],p,n);strcat(a[0],"[=11=]");
p=p+n;
memcpy(a[1],p,n);strcat(a[1],"[=11=]");
p=p+n;
memcpy(a[2],p,n);strcat(a[2],"[=11=]");
for(int i=0;i<3;i++)
{
printf("%s\n",a[i]);
}
}
但是在输出数组时得到以下结果,
//input
5
toioyhpknmtlghk
//output
toioy
hpknm{tlghk‼â
tlghk‼â
命令 strcat(a[0],"[=11=]");
正在处理已被 [=12=]
终止的字符串。否则它不知道 where 附加第二个字符串。在您的情况下 a[0]
未终止,因此该函数将引发未定义的行为。您可以改为执行以下操作:
a[0][n] = '[=10=]';
(其余a
个元素相同)