我试图用另一个字符串的一部分覆盖一个字符串中的一部分。
基本上,我想访问字符串的给定索引,从另一个字符串的另一个给定索引中写入给定数量的字符。
所以像memcpy(stringa[indexa], stringb[indexb], length);
这样的函数,只是它不起作用。
使用strncpy
也就足够了。
根据要求提供更多代码:
void mymemset(char* memloc, char* cmd, int data_blocks[], int len)
{
int i = 0;
while(i < len)
{
//missing part. Where I want the "memcpy" operation to take place
i++;
}
return;
}
memloc
是我们要重写的字符串,cmd
是我们要从中重写的字符串。data_blocks
包含关于我们应该在memloc
中写入的位置的信息,len
是我们正在执行的操作数。所以我想在位置data_blocks[i]
重写,每次从cmd
重写8个字符。
编辑:我想我只是忘了一个&
,很抱歉把你弄糊涂了,谢谢你抽出时间。这似乎奏效了:
void mymemset(char* memloc, char* cmd, int data_blocks[], int len)
{
int i = 0;
while(i < len)
{
memcpy(&memloc[data_blocks[i]], &cmd[i*8], 8);
i++;
}
return;
}
从cmd
每次取8个字节,将它们存储在memloc
中由data_blocks[i]
给出的索引处。如前所述,data_blocks
包含关于memloc
中可用的不同索引的信息,并且可以对字符串cmd
进行分段。
假设stringa
和stringb
声明如下
char stringa[] = "Hello" ;
char stringb[] = "World" ;
这应该有效:
memcpy(&stringa[1], &stringb[1], 2) ;
您的示例不应该编译,或者如果它编译了,则可能会崩溃或导致未定义的行为:
memcpy(stringa[1], stringb[1], 2) ;
您的命名令人困惑:memset
使用字节。若您操作字符串,您需要采取额外的预防措施:想想