我有一个字符串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 '\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‼â
答案 0 :(得分:1)
命令strcat(a[0],"\0");
正在处理已由\0
终止的字符串。否则它不知道 where 附加第二个字符串。在您的情况下,a[0]
未终止,因此该函数将导致未定义的行为。您可以改为:
a[0][n] = '\0';
(其他a
元素也一样)